哪个mysql选择更好/更快?

时间:2009-11-10 00:04:08

标签: sql mysql performance

有首选方式吗?目前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的

5 个答案:

答案 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)

我还想添加所有其他回复:

尝试添加一百万条记录。最好的方式来确定。