有首选方式吗?目前game
表中有1640行要进行,每年将增加约1200行。
SELECT `date` FROM `game` WHERE `date`<'2009-11-09' ORDER BY `date` DESC LIMIT 1;
0.0004秒
SELECT MAX(`date`) AS `date` FROM `game` WHERE `date`<'2009-11-09' LIMIT 1;
0.0006秒
速度是第一次运行。之后每次都是0.0002。
MySQL的:
服务器:通过UNIX套接字的本地主机
服务器版本:5.1.37
PHP(不应该相关):
5.x的
答案 0 :(得分:2)
应用MySQL EXPLAIN并检查查询计划。第二个例子可能有一个更清洁的计划,这很好看,因为它看起来更干净。 (一旦删除限制。)
本地的点头测试显示(没有索引)。
查询1:
EXPLAIN
SELECT datex
FROM TABLE_X x
WHERE datex < "2009-10-20"
ORDER BY datex DESC
LIMIT 1
计划
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE x ALL NULL NULL NULL NULL 2 Using where; Using filesort
查询2:
EXPLAIN
SELECT MAX( datex )
FROM TABLE_X x
WHERE datex < "2009-10-20"
计划
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE x ALL NULL NULL NULL NULL 2 Using where
答案 1 :(得分:1)
使用这些行数和查询的简单性,它应该无关紧要。您也不需要第二个查询的限制。只需选择一个更容易理解的内容。
答案 2 :(得分:1)
在第二个查询中,您不必添加LIMIT 1
。它总是返回1行。我会说第二个查询更具可读性,您应该使用。但我同意@jle。你有一个非常小的数据库,它确实不会影响性能。
答案 3 :(得分:0)
您可以使用explain来查看计划是什么(即mysql如何工作) - http://dev.mysql.com/doc/refman/5.0/en/explain.html
我认为它们几乎完全相同,但这是检查的最佳方式(可能取决于索引等)。
但我不得不问 - 你真的需要担心吗?它并不是很慢,桌子也没有大幅增长。
最后,您不需要第二个“限制”。
答案 4 :(得分:0)
我还想添加所有其他回复:
尝试添加一百万条记录。最好的方式来确定。