Oracle11g 在Oracle中,where条件的位置是否会影响查询速度?

Oracle11g 在Oracle中,where条件的位置是否会影响查询速度?,oracle11g,where-clause,partitioning,Oracle11g,Where Clause,Partitioning,我们有甲骨文11g。我们有一张4亿行的桌子。说P_计划 我们的表每月由一个名为WORKTIME的列进行分区 我的一位同事认为,查询的速度受where条件的位置影响。因此: Select * from SCHEDULE where WORKTIME = ? and SOMEOTHERCOLUMN = ? 它不同于 Select * from SCHEDULE where SOMEOTHERCOLUMN = ? and WORKTIME = ? 他声称oracle execution plann

我们有甲骨文11g。我们有一张4亿行的桌子。说P_计划

我们的表每月由一个名为WORKTIME的列进行分区

我的一位同事认为,查询的速度受where条件的位置影响。因此:

Select * from SCHEDULE where WORKTIME = ? and SOMEOTHERCOLUMN = ?
它不同于

Select * from SCHEDULE where SOMEOTHERCOLUMN = ? and WORKTIME = ?
他声称oracle execution planner由where条件的位置决定。因此,如果它首先找到分区条件,它就会决定转到该分区,从而影响性能

我不是数据库专家,但我认为Oracle execution planner应该比这更聪明


你是怎么认识这种知识的?where条件的位置是否影响查询性能?是的,在其他列的值数少于WORKTIME列的情况下,它会影响查询执行。因为它的环境和条件

当它满足SOMEOTHERCOLUMN值时,它将用于WORKTIME column值

意味着存在这样的情况:它不满足SOMEOTHERCOLUMN值,因此它将转义查询计算的其余部分

例如,SomeOther列具有=3个值,WORKTIME列具有10个值。现在考虑我们的情况。

< P>我可以解释我前面的答案解释

的答案。 比如说

Employee_主表包含以下字段和记录

员工id------员工姓名------员工工资

查询1-从员工姓名如“A%”和员工工资>10000的员工主数据中选择*

查询2-从Employee_master中选择*,其中员工工资>10000,员工姓名如“A%”

比较两者,查询1的执行速度将快于查询2

原因-查询1将检查列中的第一个和条件,并找到2种可能性,然后检查第二个和条件,并找到7种可能性 查询2将检查列中的第一个和条件,并找到7种可能性,然后检查第二个和条件,并找到2种可能性


使用和选通时,应首先考虑最小可能性条件。

这很容易检查。您只需要比较执行计划。一般来说,条件的顺序并不重要。我检查了成本,结果是一样的。但我有一些不确定的经验,即成本不是查询速度的总体标准。同样,我不知道技术背景。请参考我在下面的回答中的解释,我的意思是:执行计划、统计数据、基准等。你的只是一些想象,可能根本与现实无关。
  1                     ABC                   11000
  2                     AXY                   12000
  3                     CBC                   13000
  4                     CXY                   14000
  5                     XBC                   11000
  6                     XXY                   12000
  7                     YBC                    5000
  8                     YXY                   14000