SQL语句一:
SELECT B.ALARM_TYPE BASIC_ALARM_TYPE
      ,B.ALARM_NAME BASIC_ALARM_NAME
      ,T1.BASIC_ALARM_TYPE
  FROM GDC_BASIC_ALARM_TYPE_T B
  LEFT OUTER
  JOIN (
SELECT T.BASIC_ALARM_TYPE
  FROM GDC_ALARM_TEMPLATE_T T
WHERE T.STATE = '1'
   AND T.BUSINESS_ALARM_TYPE = '1')T1 ON T1.BASIC_ALARM_TYPE = B.ALARM_TYPE
WHERE T1.BASIC_ALARM_TYPE IS NULLSQL语句二:
SELECT B.ALARM_TYPE BASIC_ALARM_TYPE
      ,B.ALARM_NAME BASIC_ALARM_NAME
  FROM GDC_BASIC_ALARM_TYPE_T B
WHERE NOT EXISTS(
SELECT T.BASIC_ALARM_TYPE
  FROM GDC_ALARM_TEMPLATE_T T
WHERE T.BASIC_ALARM_TYPE = B.ALARM_TYPE
   AND T.STATE = '1'
   AND T.BUSINESS_ALARM_TYPE = '1')SQL语句三:
SELECT F.ALARM_TYPE BASIC_ALARM_TYPE
      ,F.ALARM_NAME BASIC_ALARM_NAME
  FROM GDC_BASIC_ALARM_TYPE_T F
WHERE F.ALARM_TYPE IN((
SELECT B.ALARM_TYPE BASIC_ALARM_TYPE
  FROM GDC_BASIC_ALARM_TYPE_T B) MINUS (
SELECT T.BASIC_ALARM_TYPE
  FROM GDC_ALARM_TEMPLATE_T T
WHERE T.STATE = '1'
   AND T.BUSINESS_ALARM_TYPE = '1'))其实就是一个求集合差的语句,但是执行计划确有点不同,搞不明白哪个是高效的,大拿教教我怎么分析呗。
SQL1SQL2SQL3

解决方案 »

  1.   

    前2个cost是一样的 card不同 第3个cost大
      

  2.   

    CPU COST ,IO COST 值越大,资源就耗越多!
      

  3.   

    最后一句中in影响了性能,在数据量大的时候用in耗资源
      

  4.   

    我也知道  cost越大越不好,但是 左边显示的这三种执行计划 哪个好呢,这个filter、nested loops ANTI、minus这三个有什么差别呢?第三条语句  IO cost是1  但是cost却是5 怎么解释呢
      

  5.   

    这些数值只能当做参考值你在sqlplus中,set autotrace traceonly,用读取数据块的数量来判断一下这几个语句