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

处理时间是否因SQL查询顺序而异?,sql,database,Sql,Database,查找“Comp”中工资高于某些讲师的所有讲师的姓名。Sci’ 2个查询比1个查询快吗?假设一个有合理优化器的像样的SQL数据库系统,它们应该使用相同(或等效)的执行计划生成完全相同的结果 SQL尽可能尝试成为一种声明性语言。你告诉系统你想要什么,而不是怎么做 因此,单个谓词的求值顺序通常不由任何特定产品定义。(可能存在一些例外情况) 如果这里有两个不同的表,任何优秀的优化器都应该在扫描/查找S表时(可能选择使用一个索引,使其能够廉价地回答该谓词),并在向联接谓词提供任何行之前,尝试应用基于d

查找“Comp”中工资高于某些讲师的所有讲师的姓名。Sci’


  • 2个查询比1个查询快吗?

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

    SQL尽可能尝试成为一种声明性语言。你告诉系统你想要什么,而不是怎么做

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

    如果这里有两个不同的表,任何优秀的优化器都应该在扫描/查找
    S
    表时(可能选择使用一个索引,使其能够廉价地回答该谓词),并在向联接谓词提供任何行之前,尝试应用基于
    dept\u name
    的谓词,无论这些谓词以何种顺序出现在
    WHERE
    子句中

    但就在这里,由于连接谓词中的不平等性,我们可能希望的最好结果是对
    讲师
    表进行一次扫描。如果在
    工资
    上有一个指数,它可能可以用这个指数来廉价地评估不平等性(否则,如果它足够聪明,并且统计数据也证明了这一点,它可能会选择对数据进行排序)


    总而言之,事情要简单。编写简单、直截了当的查询,这些查询很容易理解用户的意图。然后,测量性能,如果性能不够,则开始调查执行计划,以确定成本/潜在缺失指标的位置,并从那里着手


    不要试图学习“黄金法则”,即必须始终执行X或Y以获得“最佳”性能。

    切勿在
    FROM
    子句中使用逗号。始终使用正确、明确、标准的
    JOIN
    语法。不,顺序不重要。可能是因为稍后会出现表连接的位,我不确定,但听起来似乎有道理,因为它可能会在更多记录上测试dept_名称(不必要)。我可能错了。但无论如何,使用正确的联接语法都会更好、更清晰。@Mike这可能无关紧要,因为在内部,显式联接和隐式联接可能具有相同的执行计划。我想,至少是这样。@Mike,但所有主要的关系数据库都是这样。不过,OP应该用数据库标记,这是对的。您使用的是哪种dbms?
    select distinct T.name
    from instructor as T, instructor as S
    where T.salary > S.salary and S.dept_name = ‘Comp. Sci.’
    
    select distinct T.name
    from instructor as T, instructor as S
    where S.dept_name = ‘Comp. Sci.’ and T.salary > S.salary