gpt4 book ai didi

sql - TOP 1 + ORDER BY 或 max/min + GROUP BY 的 TSQL 查询?

转载 作者:行者123 更新时间:2023-12-04 06:23:17 26 4
gpt4 key购买 nike

我需要通过时间戳的最大值获取值和时间戳的记录。值和时间戳的组合是一个主键。似乎有两种方法可以获得最大值/最小值。一个查询示例是使用 TOP 1 + ORDER BY:

SELECT TOP 1
value, timestamp
FROM myTable
WHERE value = @value
ORDER BY timestamp DESC

另一个是通过 MAX() + GROUP BY:
SELECT value, max(timestamp)
FROM myTable
WHERE value = @value
GROUP BY value

就性能而言,第二个是否比第一个更好?我读了 one person's comment “按第一个对 n 个项目进行排序是 O(n 2 的幂),第二个 O(n)”到 my previous question .我在值和时间戳上都有索引的情况如何?

最佳答案

如果您在 (value, timestamp) 上没有复合索引那么他们会很穷,而且可能同样很穷。

有了索引,由于查询优化器,它们可能会相同。

您还可以使用这些来快速测试自己使用的资源:

SET STATISTICS IO ON
SET STATISTICS TIME ON

...但最好的方法是使用 Graphical Execution Plans

您应该会看到有和没有索引的 IO + CPU 的巨大差异,尤其是对于较大的表。

注意:您有第三种选择
SELECT @value AS value, max(timestamp)
FROM myTable
WHERE value = @value

这将返回 NULL for no rows这确实使它与其他两个略有不同

关于sql - TOP 1 + ORDER BY 或 max/min + GROUP BY 的 TSQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com