我在不同的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";
答案 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
未经修改的时间可以使用索引来获得性能和顺序。您只需要反转您要求的内容并单独保留原始列。