2013-03-15 2 views
0

동일한 내부 쿼리가 두 번 이상 실행되는 경우 성능을 향상시키기 위해 SQL 아래에서 사용자 지정하는 방법은 무엇입니까? 사전에 감사성능 향상 SQL

DELETE FROM interactionrel 
WHERE (from_interact_id IN(SELECT interaction_id 
          FROM interaction 
          WHERE instance_pk = ?)) 
     OR (to_interact_id IN(SELECT interaction_id 
           FROM interaction 
           WHERE instance_pk = ?)) 
+2

그 문은 유효하지 않은 구문입니다 ('어디 (에서 .. '). 그리고 그것을 제대로 포맷하시기 바랍니다. –

+0

가을에는 SQL 서버 – DevelopmentIsMyPassion

+0

구문은 내가 그것을 제대로 포맷합니다. 을 INTERACTIONREL 에서 삭제 올바른 WHERE (FROM_INTERACT_ID인가) 또는 (INSTANCE_PK은 =? WHERE 상호 작용 INTERACTION_ID를 선택) ( IN TO_INTERACT_ID가 (상호 작용 INTERACTION_ID을 선택 WHERE INSTANCE_PK =?)) – user1582625

답변

1
DELETE il 
FROM interactionrel il, 
     interaction 
WHERE (interaction.interaction_id = il.from_interact_id 
      OR interaction.interaction_id = il.to_interact_id) 
     AND interaction.instance_pk = ? 
+0

감사합니다. IBM DB2를 사용하고 있습니다. SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = JOIN; – user1582625

2

당신이 시도 할 수 있습니다 - 당신은 최적화에 대해이 작업을 실행하는 데 필요 해요 있지만 :

DELETE FROM interactionrel a 
WHERE EXISTS (SELECT * 
       FROM interaction b 
       WHERE b.instance_pl = ? 
        AND (b.interaction_id = a.from_interact_id 
         OR b.interaction_id = a.to_interact_id)) 
+0

그 작업. 감사.. – user1582625