mysql视图中的日期范围导致缓慢

时间:2011-06-07 19:47:22

标签: mysql date-range

我在mysql表中有一个带有这种结构的表

id(主索引) 标题, 日期(日期时间) publicready(boolen)

我创建了这样的视图

 CREATE view FROM SELECT * FROM tablename WHERE publicready AND date < NOW() 

如果我针对它运行查询需要1.8秒但是

如果我从视图中删除日期范围相同的查询.0009秒

为什么会发生这种情况,我该如何解决?

我在所有columsn上放了一个索引,我们正在检查它确实在1.6

时略快一些

3 个答案:

答案 0 :(得分:4)

now()的问题在于,这会禁止MySQL将查询结果放入缓存中 如果删除now,则所有选择条件都是常量,MySQL可以在创建视图时将视图的结果集放在缓存中。

now()这是不可能的,每次强制执行完全执行。

答案 1 :(得分:2)

在WordPress中,我们通过添加额外状态来修复此问题,其值为“future”。这样就可以在不查看日期的情况下区分已发布和预定的帖子。如果维护这样的字段不适合你,你可以添加一个额外的标志(例如is_future)并验证它不是真的。

您可以选择保留下一个要在memcache中发布的项目的跟踪。然后查询该日期:

where publicready and date < :next_date

这样做将允许MySQL缓存查询,因为它将消除now()的使用。

答案 2 :(得分:1)

在日期列上添加索引。