当前位置: 首页 > 面试题库 >

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

鱼锦
2023-03-14
问题内容

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

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

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实际上会减慢速度,建议您避免使用,尽管它们没有解释了原因。

任何意见?

谢谢!安德烈


问题答案:

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

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



 类似资料:
  • 问题内容: SQLite如何在内部处理别名? 创建表名别名是在内部创建同一表的副本还是仅引用同一表而不创建副本? 当我在代码中创建同一表的多个别名时,查询性能会受到严重影响! 在我的情况下,我有一个表,将其称为MainTable,即2列,即名称和值。我想在一行中选择多个值作为不同的列。例如 名称:a,b,c,d,e,f 值:p,q,r,s,t,u ,使得a对应于p,依此类推。 我想在一行中选择名称

  • 问题内容: 我正在开发一个应用程序,一种设计方法涉及大量使用操作员。虽然我知道OO设计通常会尝试避免使用,但这是另一回事了,这个问题与性能完全相关。我想知道是否会对性能产生影响?是一样快吗? 例如,我有一个包含10个子类的基类。在采用基类的单个函数中,我检查该类是否是子类的实例并执行一些例程。 我想解决的另一种方法是改用“类型ID”整数基元,并使用位掩码表示子类的类别,然后将子类“类型ID”与位掩

  • 问题内容: 我们已经开始将spring aop用于我们应用程序的各个方面(当前的安全性和缓存)。 我的经理虽然十分了解这种技术的好处,但仍担心该技术对性能的影响。 我的问题是,你是否遇到了使用aop(特别是spring aop)引入的性能问题? 问题答案: 只要你能够控制自己的AOP,我就认为它是有效的。无论如何,我们确实确实存在性能问题,所以通过我们自己的推理,我们无法完全控制;)这主要是因为重

  • 问题内容: 我有一个庞大的3D点数据集(约190万行)可供选择。我最常使用的语句类似于: 我有关于x,y和z以及otherParameter的索引。我也尝试将多部分索引添加到x,y,z,但这没有帮助。 关于如何使此查询更快的任何建议? 问题答案: 索引对于这种查询没有多大帮助。 您需要什么作为索引以及对其进行最小限度的平行六面体查询。 不幸的是,仅不支持对点的索引。但是,您可以在创建索引时,比方说

  • 问题内容: 我正在尝试在MySQL选择查询中使用一条语句。 我在第一个语句之后出现错误。 为什么这不起作用?在MySQL查询中执行IF语句的正确方法是什么? 问题答案: 您使用的IF / THEN / ELSE构造仅在存储过程和函数中有效。您的查询将需要重组,因为您不能使用IF()函数来控制WHERE子句的流程。 可以在查询中使用的IF()函数主要用于在查询的SELECT部分​​中根据某些条件选择

  • 问题内容: 想象一下,我有100个SELECT查询,它们的一个输入不同。该值可以使用PreparedStatement。 我在网上看到的所有文档都是用于批量插入/更新/删除的。我从未见过用于select语句的批处理。 能做到吗?如果是这样,请在下面的示例代码时为我提供帮助。 我想可以使用“ IN”子句完成此操作,但我更喜欢使用批处理选择语句。 样例代码: 我想这可能也取决于驾驶员的行为。我正在使用