2011-12-08 5 views
1

어제처럼 저장 프로 시저가 완료되지 않았습니다. 하단에는 여전히 "쿼리가 실행 중입니다 ..."라고 표시됩니다. 오늘 제가 다르게 한 것은 쉼표로 구분 된 값을 두 배 더 추가했을뿐입니다. 쿼리가 끝나기까지 더 오래 걸릴까요?MySql에서 IN 연산자를 사용하면 성능이 저하됩니까?

DELETE FROM PRODUCTS 
    WHERE STATUS IS NULL 
    OR STATUS IN ('09','12','13','A1','C1','G1','G2','G3','H1','I1','J1','N1','S1','T1','T2','T3','T4') 

쿼리/프로 시저가 각 값에 대해 모든 레코드를 다시 검토해야합니까?

나는 단지 3 개의 값만 원하기 때문에 C3, R1과 K1은 그것을 뒤집는 것이 낫습니다.

DELETE FROM PRODUCTS 
    WHERE STATUS IS NULL 
    OR STATUS NOT IN ('C3','K1','R1') 

답변

2

IN()에 선택 사항을 추가하면 실행 시간에 영향을 미칩니다. 해당 열의 색인 생성 여부에 따라 얼마나 많은 영향을 미치게 될 것입니다. 이 간단한 쿼리를 개선해야하는 경우 STATUS에 인덱스를 만드는 것이 좋습니다.

0

Michaels comment (그리고 추후 참조 용)에 더 가깝게 EXPLAIN 키워드를 찾습니다. 조조 - 장면 뒤에서 일어나는 일을 파악하는 데 도움이 될 것입니다.

NOT ININ보다 uaually 느린 - IN가에 왕창 또는 OR 표현에 영향을 미칠 때문이다. 해당 컬럼에 대한 좋은 인덱스가 있으면 엔진은 한번에 하나씩 선택할 수 있습니다.

관련 문제