我的date_add工作正常但有些非常慢

时间:2013-08-13 01:29:32

标签: php mysql

我在不同的php文件中有三个查询。但我有一些速度问题。

query1和query2大约是650ms.

query3只需大约140ms.

以下是否有任何查询错误?如果是,请告诉我。

或者是否有任何不同的查询具有相同的结果且时间更短。

$query1 = "SELECT * FROM konu WHERE ( NOW() <  DATE_ADD( `time` , INTERVAL 1 DAY) ) ORDER BY time DESC";

$query2 = "SELECT * FROM konu WHERE ( NOW() <  DATE_ADD( `time` , INTERVAL 2 DAY ) ) AND ( NOW() >  DATE_ADD( `time`, INTERVAL 1 DAY ) ) ORDER BY time DESC";

$query3 = "SELECT * FROM konu WHERE ( NOW() >  DATE_ADD( `time`, INTERVAL 2 DAY ) ) AND ( NOW() <  DATE_ADD( `time`, INTERVAL 900 DAY ) ) ORDER BY time DESC";

1 个答案:

答案 0 :(得分:1)

如果您不理解Dagon的评论,并且完全正确。运行查询时,如果要通过日期操作等函数修改列名,则无法使用该列的索引。但是,如果更改NOW(),则可以使用基于“时间”列的表上的现有索引。

SELECT * 
   FROM konu 
   WHERE 
      NOW() <  DATE_ADD( `time` , INTERVAL 1 DAY) 
   ORDER BY 
      `time` DESC";

相同
SELECT * 
   FROM konu 
   WHERE 
      `time` > DATE_ADD( NOW(), INTERVAL -1 DAY) 
   ORDER BY 
      `time` DESC";

将结果比较为

now LESS THAN   time          Time PLUS 1 day
8/12 10pm       8/12 2am      8/13 2am     keep this
8/12 10pm       8/11 11pm     8/12 11pm    keep this
8/12 10pm       8/10  4pm     8/11 4pm     not this

VS

time AFTER     now            MINUS 1 day
8/12 2am       8/12 10pm      8/11 10pm      keep this
8/11 11pm      8/12 10pm      8/11 10pm      keep this
8/10 4pm       8/12 10pm      8/11 10pm      not this

未经修改的时间可以使用索引来获得性能和顺序。您只需要反转您要求的内容并单独保留原始列。