两个SQL查询的速度越快,排序并选择前1个,或选择MAX

时间:2010-01-28 21:56:26

标签: sql sql-server

以下两个查询中哪个更快?

1

SELECT TOP 1 order_date
FROM         orders WITH (NOLOCK)
WHERE customer_id = 9999999
ORDER BY order_date DESC

2

SELECT MAX(order_date)
FROM         orders WITH (NOLOCK)
WHERE customer_id = 9999999

5 个答案:

答案 0 :(得分:10)

索引位于order_date,它们具有相同的效果。

如果没有索引,MAX会更快一点,因为它会使用Stream Aggregation而不是Top N Sort

答案 1 :(得分:2)

ORDER BY几乎总是最慢的。必须对表格的数据进行排序。

聚合函数不应该像减少那样减慢速度。

但是,某些聚合函数使用排序作为其实现的一部分。因此,必须通过实验测试特定数据库产品中的一组特定表,以查看哪个表更快 - 对于该组数据。

答案 2 :(得分:1)

我会说第一个,因为第二个要求它通过聚合函数。

然而,正如marc_s所说,测试它。

答案 3 :(得分:0)

如果不知道至少某些关于索引的信息(你有没有关于customer_id,关于order_date?),表格中的数据量,统计数据等等,你都无法回答这个问题。

答案 4 :(得分:0)

这取决于你的桌子有多大。在第二个查询中,我猜不需要“TOP 1”,因为MAX只返回一个值。如果我是你,我会使用第二个查询。