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

时间:2014-01-21 11:49:19

标签: oracle11g where-clause partitioning

我们有Oracle 11g。我们有一个4亿行表。说 P_SCHEDULE

我们的表每月按一个列分区,该列名为 WORKTIME

我的一位同事辩称,查询的速度受where条件的位置影响。所以:

Select * from SCHEDULE where WORKTIME = ? and SOMEOTHERCOLUMN = ?

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

他声称oracle执行计划程序根据where条件的位置来决定。因此,如果它首先找到分区条件,它会决定进入该分区并影响性能。

我不是数据库专家,但我认为Oracle执行计划程序应该比这更智能吗?

你是如何遇到这种知识的? where条件的位置是否影响查询性能

2 个答案:

答案 0 :(得分:0)

我可以解释(这个答案代表我以前的答案解释)

例如

Employee_master表有以下字段和记录

Employee_id ------------- Employee_name ---------- Employee_salary

  1                     ABC                   11000
  2                     AXY                   12000
  3                     CBC                   13000
  4                     CXY                   14000
  5                     XBC                   11000
  6                     XXY                   12000
  7                     YBC                    5000
  8                     YXY                   14000

查询1 - 从Emplyee_master中选择*,其中Employee_name类似于'A%'和Employee_salary> 10000

查询2 - 从Emplyee_master中选择*,其中Employee_salary> 10000和Employee_name类似'A%'

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

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

使用AND门时,最小可能性条件应首先出现。

答案 1 :(得分:-1)

是的,当SOMEOTHERCOLUMN的值小于WORKTIME colomn时,它会影响查询执行。 (因为它的AND条件)

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

意味着有一种情况是它不满足SOMEOTHERCOLUMN值,因此它逃脱了查询评估的其余部分。

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