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

问题描述

仅仅使用可能会带来一些性能差异top,但是使用索引会获得真正的性能

如果您有UserName和Application字段的索引,则在隔离单个记录之前,数据库甚至不必触摸表。同样,它已经从表统计信息中知道这些值是唯一的,因此使用top没有区别。

解决方法

我有一个用户表,其中有一个用户名和应用程序列。用户名可以重复,但是用户名+应用程序的组合是唯一的,但是我没有在表上设置唯一约束(出于性能考虑)

问题:两者之间是否有任何区别(在性能方面):

SELECT * FROM User where UserName='myuser' AND Application='myapp'

和 -

SELECT TOP 1 * FROM User where UserName='myuser' AND Application='myapp'

由于用户名+应用程序的组合是唯一的,因此两个查询将始终返回不超过一条记录,因此TOP 1不会影响结果。我一直以为添加TOP 1会真正加快速度,因为sql
server会停止寻找匹配的内容,但是我最近在一篇文章中读到,使用TOP实际上会减慢速度,建议您避免使用,尽管它们没有解释了原因。

任何意见?

谢谢!安德烈