为什么这个日期范围查询这么慢?

时间:2014-11-12 05:18:27

标签: mysql

我有一个包含500万行的数据库表,我正在运行:

select
    *
from
    tbl
where
    datetime_created
between
   '2014-10-01 00:00:00' and
   '2014-10-31 23:59:59'

返回428k结果需要54秒

tbl上的列:

id (int pk auto inc)
actor (varchar)
action (enum)
target (varchar)
is_successful (tinyint)
datetime_created (datetime)

索引:

datetime_created (datetime_created, action, target, is_successful)

关于如何改善这一点的任何想法?

编辑:

EXPLAIN结果:

select_type: simple
type: range
possible keys
datetime_created
key: datetime_created
key_len: 8
ref: null
rows: 359569
extra: using index condition

1 个答案:

答案 0 :(得分:0)

428k可以一次性使用很多行。即使你有一个日期索引,引擎仍然必须在高值和低值之间扫描表。我会建议多个查询以较小的块读取数据并尽可能缩小结果集。

E.g。尝试添加动作枚举过滤器和日期范围应该会产生更快的结果。假设有5个枚举类型,那么您为每个动作枚举运行5个查询。您添加的索引标准越多,查询将执行的越多。

还要考虑这是否会在应用程序中使用,这是一个庞大的记录集来处理。你真的需要一次使用428k的结果吗?