簡體   English   中英

通過帶有索引的多列進行SQL過濾

[英]SQL filtering by multiple columns with indexes

我想擴展一下我之前發布的問題

我正在查詢表中的行,其中成對的列在特定的集合中。 例如,考慮下表:

id | f1  | f2
    -------------
    1  | 'a' | 20
    2  | 'b' | 20
    3  | 'a' | 30
    4  | 'b' | 20
    5  | 'c' | 20

我希望提取其中(f1,f2)對位於指定對對中的行,例如((''a',30),('b',20),...)。 在原始問題中, 馬克回答正確,我可以使用以下語法:

SELECT * FROM my_table WHERE (f1,f2) IN (('a',30), ('b',20))

這可以正常工作,但是我發現一些有關索引的意外行為:
我為f1和f2定義了一個多列索引,名為IndexF1F2 使用EXPLAIN短語,我看到MySql使用索引進行單個比較,例如:

SELECT * FROM my_table WHERE (f1,f2) = ('a',30)

但在使用“ IN”子句時則不能,如上例所示。 提供提示,例如USE INDEX(IndexF1F2)甚至FORCE INDEX(IndexF1F2)似乎沒有任何區別。

有任何想法嗎?

這是MySQL一個已知錯誤

使用以下語法:

SELECT  *
FROM    composite
WHERE   (f1, f2) = ('a', 30)
        OR (f1, f2) = ('b', 20)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM