以下两个查询中哪个更快?
SELECT TOP 1 order_date
FROM orders WITH (NOLOCK)
WHERE customer_id = 9999999
ORDER BY order_date DESC
SELECT MAX(order_date)
FROM orders WITH (NOLOCK)
WHERE customer_id = 9999999
答案 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只返回一个值。如果我是你,我会使用第二个查询。