哪个查询在下面列出的 SQL 个查询中运行得更快

which query runs faster on below listed SQL queries

员工Table

  1. select * from Employee where Salary=60000 and FirstName = 'Mark'

  2. select * from Employee where FirstName = 'Mark' and Salary = 60000

在上述子句条件颠倒的查询中,我想知道哪个查询运行得更快。

我。如果 table 除主键外没有任何索引,那么哪个查询运行得更快? 二。它取决于搜索的数据类型吗?像第一个 int(salary) 然后是 varchar(name) ?如果我们逆转,性能会改变吗?

  • 实际执行计划等于
  • 从统计 io 是相等的
  • 从统计时间是相等的

我更喜欢先使用查询

SQL 是一种声明式 语言,而不是一种过程式 语言。

也就是说,SELECT 查询描述了结果集应该是什么样子。它没有定义用于满足查询的分步操作。执行的是执行计划。这是编译阶段后由优化器生成的(一些数据库引擎甚至可以在查询开始后调整执行计划 运行)。

所以,你的问题是优化器做了什么。出于所有实际目的,优化器将生成相同的执行计划,使用相同的索引、分区、table 统计信息等。

在一种情况下,理论上性能可能存在微小差异。如果,比方说,所有的薪水都是 60000,那么首先进行比较比第二次进行比较更糟糕——因为 SQL 服务器短路 AND 计算,所以它在第一个 "false" 处停止.

我不能 100% 确定 SQL 服务器优化器是否有足够的信息来安排比较,同时考虑列中值的分布和比较的复杂性,以生成最佳排序(它会为更昂贵的比较这样做)。但是,对基类型的比较非常快,因此即使将它们反转对性能的影响也非常小。