먼저 사용하지 : 나는 질문이 사소한 경우 너무 탐닉하시기 바랍니다하는 DB 전문가가 아니에요 ...파이어 버드 2.5 SQL 쿼리 실행 계획과 인덱스 OR 문
을 나는 찾고 자식 테이블 CHILD
에 대한 쿼리를 항목이로드 될지 여부를 판별하기 위해 마스터 테이블 PARENT
의 일부 값을 올리십시오.
쿼리는이
SELECT C.*, P.DATE, P.STATUS
FROM CHILD C, PARENT P
WHERE C.PARENT_ID = P.ID
AND (P.DATE > '01.01.2015' OR (P.STATUS <> 1 AND P.STATUS <> 9));
처럼 나는 내가 비 인접 선택해야하는 상태 값과 같은 불평등을 사용할 필요가 있음을 강조하기 위해 일부러 STATUS
값을 선택한 보인다.
CHILD.PARENT_ID
필드에 외래 키가 PARENT.ID
이고 CHILD.PARENT_ID
에 색인이 생성되었습니다. 또한 DATE
및 STATUS
필드에 PARENT
테이블의 색인을 생성했습니다. 내가 가진 OR
및 AND
CHILD
이 PARENT_ID
및 PARENT
에 인덱스를 사용하는 대신 이제
, 나는 무엇을 기대했다 DATE, STATUS
에 인덱스를 사용합니다.
그러나 OR
을 사용하는 경우 쿼리는 CHILD
의 자연 계획과 PARENT.ID
의 기본 키 인덱스를 사용합니다.
SELECT P.* FROM PARENT P WHERE (P.DATE > '01.01.2015' OR (P.STATUS <> 1 AND P.STATUS <> 9));
자연의 계획보다 더 나은 사용하는 이러한 쿼리를 최적화 할 수있는 방법이 있나요 ?? : 난 단지 부모 테이블에 쿼리를 적용하는 경우 동일
가 발생합니다
여기에서 두 가지 계획을 업데이트 할 수 있습니까? Lhttps : //www.brentozar.com/pastetheplan/ ..또한 테이블 개수, 두 테이블의 인덱스 – TheGameiswar
사용중인 데이터베이스에 태그하십시오. –
질문을 편집 해주십시오. (모든 인덱스 포함) 테이블과 실행 계획에 대한'create table' 문을 추가하십시오. [_Formatted_] (http://stackoverflow.com/help/formatting) ** 텍스트 **하시기 바랍니다. [스크린 샷 없음] (http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-on-so-ask-a-question/285557 # 285557) –