回答

收藏

在SELECT查询中使用TOP 1的性能影响

技术问答 技术问答 226 人阅读 | 0 人回复 | 2023-09-14

我有一个用户表,其中有一个用户名和应用程序列。用户名可以重复,但是用户名+应用程序的组合是唯一的,但是我没有在表上设置唯一约束(出于性能考虑)
. x2 H* ]/ j5 }6 n5 z$ a问题:两者之间是否有任何区别(在性能方面):, Q9 r3 C# L$ S& ?5 ^) w
SELECT * FROM User where UserName='myuser' AND Application='myapp'0 n: i# A7 a7 Z+ q3 a- f
和 -! J9 y3 P9 I- m2 P1 Z6 o% `1 z4 E
SELECT TOP 1 * FROM User where UserName='myuser' AND Application='myapp', f1 O. z! o! Z8 O' u
由于用户名+应用程序的组合是唯一的,因此两个查询将始终返回不超过一条记录,因此TOP 1不会影响结果。我一直以为添加TOP 1会真正加快速度,因为sql
* r6 o% ~' E" N2 j+ \" vserver会停止寻找匹配的内容,但是我最近在一篇文章中读到,使用TOP实际上会减慢速度,建议您避免使用,尽管它们没有解释了原因。
+ e$ h, S1 X& a3 }+ U- R% E( {任何意见?9 s; N3 c7 \. a& I2 _
谢谢!安德烈
' v' Y  ~, z0 h+ z" T               
# s6 k; U9 ^/ m' k! a1 G- |解决方案:
4 G! W7 c6 X1 K2 V' s3 `                7 k  T% J1 o/ r" _# f7 A& I" c. g. r" |

" Q2 p1 w1 E4 C# d' H( \
! J/ ]* U% m' J2 G                仅仅使用可能会带来一些性能差异top,但是使用索引会获得真正的性能。5 V, n" t; D% L8 z
如果您有UserName和Application字段的索引,则在隔离单个记录之前,数据库甚至不必触摸表。同样,它已经从表统计信息中知道这些值是唯一的,因此使用top没有区别。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则