[英]Index for BETWEEN operation in MySql
我在MySQL中有几个表存储了按时间顺序排列的数据。 我在这个表中添加了覆盖索引,最后是日期字段。 在我的查询中,我使用BETWEEN操作日期字段选择一段时间的数据。 所以我的WHERE语句包含覆盖索引的所有字段。
当我在Extra列中执行EXPLAIN查询时,我有“使用位置” - 因此,正如我认为的那样,这意味着,日期字段不会在索引中搜索。 当我选择一个时期的数据时 - 我正在使用“=”操作而不是BETWEEN和“使用何处”没有出现 - 所有都在索引中搜索。
我能做什么,在索引中搜索包含BETWEEN操作的所有WHERE语句?
更新 :
表结构:
CREATE TABLE phones_stat (
id_site int(10) unsigned NOT NULL,
group smallint(5) unsigned NOT NULL,
day date NOT NULL,
id_phone mediumint(8) unsigned NOT NULL,
sessions int(10) unsigned NOT NULL,
PRIMARY KEY (id_site,group,day,id_phone) USING BTREE
) ;
查询:
SELECT id_phone,
SUM(sessions) AS cnt
FROM phones_stat
WHERE id_site = 25
AND group = 1
AND day BETWEEN '2010-01-01' AND '2010-01-31'
GROUP BY id_phone
ORDER BY cnt DESC
你有几行? 有时,如果优化器认为不必要,则不使用索引(例如,如果表中的行数非常小)。 你能告诉我们你的SQL是什么样的吗?
您可以尝试暗示您的索引使用情况并查看您在EXPLAIN
获得的内容,只是为了确认您的索引被忽略,例如
http://dev.mysql.com/doc/refman/5.1/en/optimizer-issues.html
如果你是通过id_phone进行GROUPing,那么一个更有用的索引就是从那个开始的索引
... PRIMARY KEY (id_phone, id_site, `group`, day) USING BTREE
如果您将索引更改为该并重新运行查询,它会有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.