以下SQL查询大约需要3个小时才能运行,我做错了什么,可以调整吗?

时间:2013-05-30 00:26:53

标签: sql performance oracle

请帮助调整以下sql查询,执行大约需要3个小时,我这样做了吗?

SELECT COUNT(P.POSTID)
    FROM QUAD.PostVersion P
    INNER JOIN QUAD.PostMapping PM
    ON PM.PostID       = P.PostID
    AND PM.LASTVERSION = P.VERSION
    INNER JOIN QUAD.USER_ U
    ON P.MODIFIEDUSERID = U.USERID
    WHERE content IS NOT NULL
    AND DBMS_LOB.INSTR(UPPER(content),'LINK') > 0

1 个答案:

答案 0 :(得分:0)

要考虑的两个问题 - 正则表达式对于大量文本比INSTR + UPPER更快,并确保对于来自的表中的每个记录不会多次评估条件。对于第一次使用REGEXP_LIKE(),第二次使用需要知道来自哪个表content

SELECT COUNT(P.POSTID)
    FROM QUAD.PostVersion P
    INNER JOIN QUAD.PostMapping PM
    ON PM.PostID       = P.PostID
    AND PM.LASTVERSION = P.VERSION
    INNER JOIN QUAD.USER_ U
    ON P.MODIFIEDUSERID = U.USERID
    WHERE REGEXP_LIKE(content,'LINK','i') 

注意:REGEXP_LIKE支持CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB列。