我想展开a question I posted a while ago:
我正在查询表中的行,其中列对位于特定集合中。例如,请考虑下表:
id | f1 | f2 ------------- 1 | 'a' | 20 2 | 'b' | 20 3 | 'a' | 30 4 | 'b' | 20 5 | 'c' | 20
我希望提取(f1,f2)对在指定的一对对中的行,例如(('a',30),('b',20),...)。在原始问题中,Mark正确回答我可以使用以下语法:
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)
似乎没有任何区别。
有什么想法吗?
答案 0 :(得分:1)
这是MySQL
中的known bug。
使用以下语法:
SELECT *
FROM composite
WHERE (f1, f2) = ('a', 30)
OR (f1, f2) = ('b', 20)