我们有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条件的位置是否影响查询性能
答案 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列。现在考虑我们的情况。