1

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

id (primary index) title, date (datetime) publicready (boolen)

我创建这样的视图

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

如果我对其运行查询需要 1.8 秒,但

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

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

我在我们正在检查的所有列上放了一个索引,它确实在 1.6 时稍微快了一点

4

3 回答 3

4

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

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

于 2011-06-07T21:56:20.683 回答
2

在 WordPress 中,我们通过添加一个额外的状态来解决这个问题,其值为“未来”。这允许在不检查日期的情况下区分已发布和预定的帖子。如果维护这样一个字段不是您的选择,您可以添加一个额外的标志(例如 is_future)并验证它不是真的。

您的另一种选择可能是跟踪要在 memcache 中发布的下一个项目。然后查询该日期:

where publicready and date < :next_date

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

于 2011-06-08T12:30:44.780 回答
1

在日期列上放置一个索引。

于 2011-06-07T19:54:16.673 回答