我有以下查询:
select * from my_table
where (col1, col2) in ( (1000,1), (2000,2) )我在col1、col2、col1和col2上定义了索引。如果我在上面运行解释,我会发现mysql找不到可用的索引来使用。有趣的是,如果我在in子句中只放了一对,那么解释就会找到所有的索引。
尝试过的力量指数,没有帮助
如果有任何想法,我如何使mysql识别索引?
发布于 2014-05-04 02:11:57
我没有意识到这一点;所以先试用(Fiddle http://sqlfiddle.com/#!2/f88bb/2),是的,这是正确的;对于多列IN子句,它使用的是full table scan而不是可用的索引。
经过更多的搜索后,发现这是MySQL中的一个BUG,将在MySQL 6.x中发布或修复。
多列IN不使用索引的完整信息见这里
因此,现在您可以将查询转换为使用单个IN子句,以便它识别索引;
select * from my_table
where col1 in ( 1000,2000) and col2 in (1,2)创建BUG/优化请求的人在这里解释了(或)给定的复制步骤
多列IN子句-意外的MySQL问题
https://stackoverflow.com/questions/23451533
复制相似问题