问题描述
仅仅使用可能会带来一些性能差异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实际上会减慢速度,建议您避免使用,尽管它们没有解释了原因。
任何意见?
谢谢!安德烈