[英]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.