当范围太大时,MySQL不使用索引

时间:2014-05-23 09:02:35

标签: mysql indexing range

我正在处理2个查询:

EXPLAIN SELECT ecpm AS cpm, date_added, cpid, sales
FROM table1
WHERE date_added >=20130501000000
AND date_added <20140531235959

EXPLAIN SELECT ecpm AS cpm, date_added, cpid, sales
FROM table1
WHERE date_added >=20140501000000 
AND date_added <20140531235959

第一个查询使用1079470行,第二个查询使用14942.

我的问题:第一个查询不使用INDEX:

1   SIMPLE  table1  ALL PRIMARY,date_added  NULL    NULL    NULL    1079470 Using where

而第二个确实:

1   SIMPLE  table1  range   PRIMARY,date_added  date_added  8   NULL    14942   Using where

我应该使用哪个参数来启用INDEX,我的范围是否很大?

谢谢,

1 个答案:

答案 0 :(得分:0)

MySQL可能已经确定避免更大范围的索引更有效,因为它最终会扫描整个表(基于优化器剪枝设置)。

我建议阅读MySQL查询优化:Controlling the Query Optimizer。更具体地说,看看optimizer prune levels

以下是EXPLAIN查询的更多信息:Optimizing queries with EXPLAIN