2011-12-31 4 views
4
같은 쿼리에서 큐션 순서가 무엇

:SQL 쿼리 실행 순서 WHERE 절

내 질문에 먼저 무엇 일치 할 것입니다
SELECT * FROM [users] WHERE [userid] = 50001 AND [username] = 'new user' 

- [사용자 ID] 또는 [사용자 이름].

이며 실행 시간에 영향을줍니다.

이 쿼리를 향상시키는 데 도움이 될만한 질문이 있습니다.

답변

6

대답은 SQL 엔진에서 사용할 수있는 인덱스에 따라 다릅니다. userid의 색인이 있지만 username이 아닌 경우 엔진은 일 가능성이 높으며 userid으로 시작해야합니다. username이 색인화되었지만 userid이 아닌 경우 엔진은 일 것입니다.의 이름으로 시작하십시오. 두 필드가 모두 인덱싱되면 엔진은 해당 인덱스를 검색하고 내부 ID로 행을 조회합니다. 이 모든 것은 사용중인 RDBMS에 크게 의존합니다. 일부 엔진은 행 수가 적을 때 전체 테이블 검색에 찬성하여 인덱스 검색을 포기합니다.

+0

두 열이 인덱스되지 않았다고 가정하고, 먼저 실행될 항목을 가정합니다 (일치하는 조건을 2 개만 보여주는 예제이므로 너무 많은 AND 조건이있는 경우 어떻게됩니까?). – nirav

+1

@ nirav.patel 인덱스가없는 경우 RDBMS는 계산 순서를 자유롭게 선택할 수있어 최상의 성능을 제공합니다. 일부 RDBMS 엔진 (예 : 오라클)은 최적의 순서를 선택하기 위해 데이터 분산에 대한 통계를 계산합니다. 예를 들어, RDBMS가 40000 행의 테이블에서 ID 열에 40000 개의 구별 값이 있고 이름에 3000 개의 구별되는 값이있는 것을 알고 있으면 더 구체적인 응답을 약속하기 때문에 ID를 먼저 보게됩니다. – dasblinkenlight

+0

그리고 pl/sql에서 어떤 컬럼이 인덱스되어 있는지 어떻게 알 수 있습니까? –

0

SQL 기반 데이터베이스 엔진은 일반적으로 클러스터 된 (데이터 레코드의 물리적 순서) 및 사용 가능한 모든 인덱스를 기반으로 최적화됩니다. MySQL과 MS SQL Server (최소한 다른 것들도 많음)는 쿼리를 최적화하기 위해 필터를 실행할 순서를 알기에 충분히 똑똑합니다.

목적에 관계없이 동일한 성능으로 어떤 순서로든 실행 결과가 동일하게됩니다.

+0

하지만 AND 조건이 15보다 높으면이 경우 시퀀스가됩니다. – nirav

2

데이터베이스가있는 조건을 실행하기 위해 어떤 순서를 결정합니다.

일반적으로 (그러나 항상) 가능한 경우 먼저 인덱스를 사용합니다.

당신의 조건 또는 조인 최적화 할 필요가 얼마나 볼 수 있습니다 - SQLStatementExecution - Example Discussion1 - Example Discussion2 - Example Discussion3

일반적으로

말하기, 절 평가 및 최적화 된 기준에서의 순서 실행 계획을 만들기 전에 쿼리 최적화 프로그램에서 이것은 좋다. 그러나 각 쿼리를 프로덕션 환경에 배치하기 전에 쿼리 실행 계획을 검토하는 것이 좋습니다.