이 질문은 MySQL에만 적용되지만이 대답이 일반적으로 SQL 엔진에 적용되는지는 알 수 없습니다.MySQL 쿼리 효율성 제안
또한 구문 쿼리가 아니기 때문에 간결성/명확성을 위해 psuedo-SQL을 사용하고 있습니다.
C [1] .. C [M]은 (AND 또는 OR로 분리 된) 기준 집합이며 Q [1] .. Q [N]은 다른 집합 (OR로 구분)입니다. C [1] ... C [M]을 사용하여 테이블을 필터링하고이 필터링 된 테이블에서 Q [1] ... Q [N]과 일치하는 모든 행을 원합니다.
내가 할 것 인 경우 : C [1] ... C [M]을 한 번만 발견되는 각각의 Q는 [I]이 캐시에 대해 실행되도록
SELECT ... FROM ... WHERE (C[1]...C[M]) AND (Q[1]...Q[N])
이 자동으로 최적화 할 것인가 에드 결과? 그렇지 않은 경우, 나는 다음과 같이 두 가지로 쿼리를 분리해야합니다
INSERT INTO TEMP ... SELECT ... FROM ... WHERE C[1]...C[N]
SELECT ... FROM TEMP WHERE Q[1]...Q[N]
,이 질문은 너무 광범위 조금입니다 : 조회, 스키마의 특성이와 RDBMS는 모두 대답에 영향을줍니다. 인덱스를 사용할 수있는 절의 부울 단순화 및 우선 순위 지정을 제외하고 현재 버전의 MySQL에서는 옵티 마이저가 나머지 절을 게으른 평가를 위해 불확정한 순서로 선택한다고 생각합니다. 다른 쿼리를 통해 임시 테이블이 아닌 하위 쿼리의 구체화 된 테이블을 사용할 수도 있지만 다른 테이블을 통하지 않고 영향을 줄 수있는 방법이 있다고 생각하지 않습니다. – eggyal