我有一个查询,可以用两种不同的方式表达,但结果相同。出于性能还是其他原因,哪一个更好?
第一个查询:
SELECT post_id FROM posts
WHERE post_date BETWEEN '2010-01-01 00:00:00' AND '2010-12-31 23:59:59'
第二次查询:
SELECT post_id FROM posts
WHERE YEAR(post_date)=2010
提前致谢。
在提出基准测试建议后,我进行了一些搜索和测试。由于我的计算机出现一些问题,我的测试不是基准测试,但它们给了我一些想法。
我测试了我的 4000 划船桌,没有发现重大差异。 BETWEEN 命令仅比 YEAR(post_date) 多 0.01-0.02 秒,总查询时间为 0.09。似乎使用 YEAR(post_date) 对性能和可用性都有好处。
我在搜索时了解到;如果小时或分钟不是那么重要,BETWEEN 可以这样使用:
SELECT post_id FROM posts
WHERE post_date BETWEEN '2010-01-01' AND '2010-12-31'
如果您有索引post_date
(如果您想经常运行此查询,我建议您这样做),然后BETWEEN
query 可以使用它 http://dev.mysql.com/doc/refman/5.0/en/range-optimization.html。一旦您将一列放入函数中(YEAR(post_date)
),MySQL 不再使用该列的索引,因此它必须遍历所有行(这称为full table scan
).
查看输出EXPLAIN SELECT
与您的查询(检查这个教程 http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm)并看看您会得到什么结果 - 如果有可用的索引,您应该清楚地看到差异。
当然,对您的代码进行基准测试并亲自查看 - 但一般来说,在 WHERE 中使用函数速度较慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)