繁体   English   中英

两个日期之间的mysql索引

[英]mysql between two dates index

我正在从mysql数据库表中选择数据。 当我搜索特定日期时,我的索引很好。 当我在两个日期之间搜索数据时,索引不起作用,查询花费了很长时间。 有谁知道如何改善查询或索引?

查询A:

EXPLAIN SELECT * FROM sal_import  
WHERE dateStats>="2011-07-28" AND dateStats<="2011-07-30" GROUP BY f_shop


id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   range   dateStats   dateStats   3   (NULL)  7896    Using where; Using temporary; Using filesort

查询B:

EXPLAIN SELECT * FROM sal_import i 
WHERE dateStats="2011-07-30" GROUP BY f_shop


id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   ref dateStats   dateStats   3   const   2182    Using where

这是表的索引:

ALTER TABLE sal_import ADD INDEX(dateStats,f_shop);

非常感谢你。

尝试这个:

SELECT * FROM sal_import WHERE dateStats BETWEEN '2011-07-28' AND '2011-07-30'

另请参见http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

原因是日期索引是非聚集的,因此,该键没有按顺序对数据进行排序。 您的表中的记录很少,因此查询优化器决定更快地执行全表扫描,而不是使用二级索引将记录分段。

一个表只能有一个聚集索引,这通常是主键。 日期列通常是放置聚簇索引的有效且明智的列,但它可能不是最佳选择。 这实际上取决于该表的使用方式。

http://msdn.microsoft.com/zh-CN/library/aa933131(v=sql.80).aspx

不幸的是,在MySQL中,聚集索引必须位于唯一列上,并且您不能(显然)不能在列上定义聚集索引。 数据库默认为您选择该索引。 鉴于此,您可能不会对此感到幸运。

http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM