And*_*rey 21 sql t-sql sql-server
我有一个User表,其中有Username和Application列.用户名可能重复,但用户名+应用程序的组合是唯一的,但我没有在表上设置唯一约束(性能)
问题:以下两者之间是否存在任何差异(性能方面):
SELECT * FROM User where UserName='myuser' AND Application='myapp'
Run Code Online (Sandbox Code Playgroud)
AND -
SELECT TOP 1 * FROM User where UserName='myuser' AND Application='myapp'
Run Code Online (Sandbox Code Playgroud)
由于Username + Application的组合是唯一的,因此两个查询总是返回不超过一条记录,因此TOP 1不会影响结果.我一直认为添加TOP 1会真正加快速度,因为sql server会停止查找它找到一个匹配项,但我最近在一篇文章中读到使用TOP实际上会减慢速度并且建议避免,尽管它们没有解释原因.
任何意见?
谢谢!安德烈
Joe*_*orn 17
如果结果中有多行而没有ORDER BY子句,则"TOP 1"会为服务器节省大量工作.如果有一个order by子句,服务器仍然必须实现整个结果集,如果只有一行它并没有真正改变任何东西.
Guf*_*ffa 15
您可能会top因使用索引而获得一些性能差异,但使用索引可获得真正的性能.
如果您有UserName和Application字段的索引,则数据库甚至不必触及该表,直到它隔离了单个记录.此外,它已经从表统计中知道值是唯一的,因此使用top没有区别.
我认为这取决于SQL生成的查询执行计划。在过去的SQL Server版本中,我已经看到使用多余的“ TOP”为具有许多联接的复杂查询带来了明显的性能优势。但绝对不是在所有情况下。
我想我能提供的最佳建议是根据具体情况进行尝试。
| 归档时间: |
|
| 查看次数: |
15975 次 |
| 最近记录: |