MySQL - 不使用索引来处理大的IN条件

时间:2015-01-06 13:12:54

标签: mysql indexing

我正在尝试使用此查询在7+ millon表中选择大约800,000行

 SELECT * FROM news_completed USE INDEX (brand_id) WHERE `brand_id`IN (6346,6324,364,6460,6341,6495,6340,6438,6496,6439,6345,6344,6343,6497,6446,6450,6445,6443,6338,6440,6492,6449,6435,6609,6493,6347,6442,6339,6437,6444,6436,6494,6342,6575,6574,6576);

列brand_id已建立索引,但未使用索引,即使我强制在查询中使用。 EXPLAIN声明:http://hpics.li/209e767

但是,如果我将IN内的品牌数量减少一半(aprox),则使用brand_id索引: http://hpics.li/02f9822

你能解释一下这个限制是什么以及如何避免这种限制?或者以更有效的方式构建我的查询?

非常感谢, 马克西姆。

1 个答案:

答案 0 :(得分:0)

我认为使用FORCE INDEX解决了我的问题,即使我不确定为什么默认情况下不使用索引。 我想优化者认为全扫描比范围扫描更好,我的测试让我觉得这是错误的。

MySQL not using indexes with WHERE IN clause?