0

次の 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
4

1 に答える 1

0

注目すべき 2 つの問題 - 大量のテキストに対しては正規表現の方が INSTR+UPPER よりも高速であり、条件が元のテーブル内の各レコードに対して複数回評価されないようにします。最初の使用では REGEXP_LIKE() を使用し、2 番目の使用では、どのテーブル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 列をサポートします。

于 2013-05-30T10:39:53.230 に答える