在我的所有SQL查询中,我总是有一个“WHERE日期”。加速?

时间:2014-11-11 14:35:09

标签: mysql performance

我有一张包含数十万行的大表。但是,实际上只有大约50,000行是“活动的”并且是我查询的一部分,因为我只选择了使用WHERE crdate > "2014-08-10"过去14天更新过的行。所以为了加快对表的查询,我正在考虑以下哪些选项(或者你有另一个建议?),这是最好的选择:

  1. 我可以删除所有旧条目并将它们插入到“历史”表中,每天/每周运行一次cronjob。但是,如果我想对那个进行查询,这仍然会使历史表变慢。

  2. 我可以在我的“crdate”列上创建一个索引。但是我的日期格式为“2014-08-10 06:32:59”,所以我猜因为它存储了很多不同的值,索引会很大(?)而且可能很慢(?)。

  3. 你们有没有其他建议我如何加快对这张桌子的查询?在具有许多不同值的日期列上设置索引是不是一个坏主意?

2 个答案:

答案 0 :(得分:3)

数据库的第一条规则。始终对要过滤的列具有索引。

所以是的,在crdate上添加一个索引。

您也可以并行使用历史记录表,但也要确保将索引放在历史记录表中的crdate列上。拥有历史表将允许您在主表中使用较小的索引。

答案 1 :(得分:0)

我想为将来的googler添加这个。如果您要查询数据时间,则更独特的查询将导致更高效的查询,例如

SELECT * FROM MyTable WHERE MyDateTime = '01/01/2015 00:00:00'

会比以下更快:

 SELECT * FROM MyTable WHERE MyDateTime = '01/01/2015'

我在500万行的索引视图(按日期时间)上反复测试了这一点,更明显的查询给了我1秒的快速响应