处理时间是否因SQL查询顺序而异?

时间:2018-04-17 10:49:04

标签: sql database

找到薪水高于“Comp”中某些讲师的所有教师的姓名。科学”。

  1. select distinct T.name
    from instructor as T, instructor as S
    where T.salary > S.salary and S.dept_name = ‘Comp. Sci.’
    
  2. select distinct T.name
    from instructor as T, instructor as S
    where S.dept_name = ‘Comp. Sci.’ and T.salary > S.salary 
    
  3. 是否正确2查询比1查询更快?

1 个答案:

答案 0 :(得分:2)

假设一个合理的SQL数据库系统具有合理的优化器,它们应该使用相同(或等效的)执行计划产生完全相同的结果。

SQL尽可能尝试成为声明性语言。您告诉系统您想要什么,而不是如何操作

因此,评估单个谓词的顺序通常不由任何特定产品定义。 (可能存在一些例外情况)。

如果这里有两个不同的表,任何体面的优化器都应该尝试将基于dept_name的谓词应用于它在S表中扫描/搜索(也许选择使用一个允许它以低成本方式回答该谓词的索引,并且在将任何行提供给连接谓词之前,无论这些谓词在WHERE子句中提供的顺序如何。

尽管如此,由于连接谓词中的不等式,我们可能希望的最好的是对instructor表进行单次扫描。如果在salary上有一个索引,它可以用它来便宜地评估不平等(否则它可能会选择对数据进行排序,如果它足够聪明并且统计数据有保证的话)。

所以,总结一下,保持简单。编写简单易懂的查询,易于理解 intent 。然后,衡量绩效,如果不充分,则开始调查执行计划,以确定成本/潜在缺失索引的位置并从那里开始工作。

尝试学习“黄金规则”,表示你必须始终做X或Y才能获得“最佳”表现。