存在Vs IN Vs =

时间:2014-04-25 01:58:03

标签: oracle oracle11g oracle10g query-optimization sql-execution-plan

考虑到MASTER表具有列ID的主键

这是原始查询

  

UPDATE SET ID = DESC where EXISTS(从MASTER IM2中选择1)   IM2.CD_ID =:B2 AND IM2.ID = A.DESC)

这是修改后的查询1

  

更新SET ID = DESC在哪里A.DESC IN(从MASTER中选择IM2.DESC   IM2 WHERE IM2.CD_ID =:B2 AND IM2.ID = A.DESC)

这是修改后的查询2

  

UPDATE SET ID = DESC WHERE A.DESC =(从MASTER中选择IM2.DESC   IM2 WHERE IM2.CD_ID =:B2 AND IM2.ID = A.DESC)

  • 修改后的查询1使用表MASTER
  • 上的索引
  • 修改后的查询2使用MASTER的主键

两个修改过的都表现得更好。

3个查询在功能上是否相同?

1 个答案:

答案 0 :(得分:2)

不,它们与第一个查询不同。

第一个查询是检查两个条件:

  1. IM2.CD_ID =:B2
  2. IM2.ID = A.DESC
  3. 剩下两个查询正在检查三个条件:

    1. M2.CD_ID =:B2
    2. IM2.ID = A.DESC
    3. A.DESC = IM2.DESC
    4. 请查看条件#2和#3及其含义....

      IM2.id = A.DESCA.DESC = IM2.DESC ===> IM2.id = IM2.DESC

      所以最后两个查询相当于:

        

      ....在哪里存在(
         选择1来自MASTER IM2
         在哪里IM2.CD_ID =:B2和IM2.ID = A.DESC AND IM2.id = IM2.DESC

相关问题