select a.wtpartnumber 
  from sql_wtpartmaster a 
  where  not exists (select  ida3b5 from sql_aupartusagelink b
where a.ida3b5=b.ida2a2)

解决方案 »

  1.   

    not like怎么优化?等待高手。
      

  2.   

    我改成like 和or ,这样可以用index,不过or的条件很多啊
      

  3.   

    那个partnumber不是很长,substr和like差不多的,而且如果用substr的话要建立函数索引的
      

  4.   

    数据量大的话不要用IN
    exist 会快很多。
      

  5.   

    有办法解决这个not like问题的。ORACLE支持函数索引,你可以使用函数来区分取舍,然后在此函数上建立索引即可。
      

  6.   

    使用DECODE函数来减少处理时间 
    使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 
    例如: 
       SELECT COUNT(*),SUM(SAL) 
       FROM EMP 
       WHERE DEPT_NO = 0020 
       AND ENAME LIKE ‘SMITH%’; 
       SELECT COUNT(*),SUM(SAL) 
       FROM EMP 
       WHERE DEPT_NO = 0030 
       AND ENAME LIKE ‘SMITH%’; 
    你可以用DECODE函数高效地得到相同结果 
    SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT, 
            COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT, 
            SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL, 
            SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL 
    FROM EMP WHERE ENAME LIKE ‘SMITH%’; 
    类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中. 
      

  7.   

    用NOT EXISTS替代NOT IN 
    在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 
    例如: 
    SELECT … 
    FROM EMP 
    WHERE DEPT_NO NOT IN (SELECT DEPT_NO 
                             FROM DEPT 
                             WHERE DEPT_CAT=’A’); 
    为了提高效率.改写为: 
    (方法一: 高效) 
    SELECT …. 
    FROM EMP A,DEPT B 
    WHERE A.DEPT_NO = B.DEPT(+) 
    AND B.DEPT_NO IS NULL 
    AND B.DEPT_CAT(+) = ‘A’ 
    (方法二: 最高效) 
    SELECT …. 
    FROM EMP E 
    WHERE NOT EXISTS (SELECT ‘X’ 
                        FROM DEPT D 
                        WHERE D.DEPT_NO = E.DEPT_NO 
                        AND DEPT_CAT = ‘A’); 
      

  8.   

    substr(col,1,2) <> 'xx'
      

  9.   

    用NOT EXISTS替代NOT IN 
    在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 
    例如: 
    SELECT … 
    FROM EMP 
    WHERE DEPT_NO NOT IN (SELECT DEPT_NO 
                             FROM DEPT 
                             WHERE DEPT_CAT=’A’); 
    为了提高效率.改写为: 
    (方法一: 高效) 
    SELECT …. 
    FROM EMP A,DEPT B 
    WHERE A.DEPT_NO = B.DEPT(+) 
    AND B.DEPT_NO IS NULL 
    AND B.DEPT_CAT(+) = ‘A’ 
    (方法二: 最高效) 
    SELECT …. 
    FROM EMP E 
    WHERE NOT EXISTS (SELECT ‘X’ 
                        FROM DEPT D 
                        WHERE D.DEPT_NO = E.DEPT_NO 
                        AND DEPT_CAT = ‘A’); 
      

  10.   

    in的问题应该说已经有结果了,就是用exists代替,但是not like呢?