Cra*_*aig 36 sql t-sql sql-server
我不得不审查一些代码,并且遇到了某人所做的事情,并且无法想出我的方式更好的原因.它可能不是,那么哪个更好/更安全/更有效?
SELECT MAX(a_date) FROM a_table WHERE a_primary_key = 5 GROUP BY event_id
Run Code Online (Sandbox Code Playgroud)
要么
SELECT TOP 1 a_date FROM a_table WHERE a_primary_key = 5 ORDER BY a_date
Run Code Online (Sandbox Code Playgroud)
我会选择第二种选择,但我不确定为什么,如果这是对的.
Jun*_*r M 39
1)当表上有聚簇索引和要查询的列时,MAX()运算符和查询的SELECT TOP 1性能几乎相同.
2)当表和要查询的列上没有聚簇索引时,MAX()运营商提供更好的性能.
参考:http://www.johnsansom.com/performance-comparison-of-select-top-1-verses-max/
Cha*_*ins 17
如果您的表已编入索引,则性能通常类似.
值得考虑的,但:Top通常才有意义,如果你订购你的结果(否则top的是什么?)
订购结果需要更多处理.
Min并不总是需要订购.(只是取决于,但通常你不需要订购或分组等)
在你的两个例子中,我希望speed/x-plan非常相似.您可以随时转向您的统计数据,但我怀疑差异是否显着.
GSe*_*erg 11
它们是不同的查询.
第一个返回多个记录(最大a_date为各event_id中找到a_primary_key = 5)
第二个返回一条记录(在其中a_date找到的最小记录a_primary_key = 5).
要使查询具有相同的结果,您需要:
SELECT MAX(a_date) FROM a_table WHERE a_primary_key = 5
SELECT TOP 1 a_date FROM a_table WHERE a_primary_key = 5 ORDER BY a_date DESC
Run Code Online (Sandbox Code Playgroud)
了解哪个更快的最佳方法是检查查询计划并执行基准测试.有许多因素会影响速度,例如表/堆大小等.甚至可以优化同一数据库的不同版本以支持一个查询而不是另一个查询.
我在一张有 20,00,000 多条记录的表上执行 max 和 top ,发现Top通过 order by 比 max 或 min 函数给出更快的结果。
因此,最好的方法是在一段时间内一一执行您的查询并检查连接经过的时间。
| 归档时间: |
|
| 查看次数: |
45325 次 |
| 最近记录: |