Dev/Database

[Oracle/MSSQL] WHERE 조건절 순서에 따른 속도차이, 조건절 순서 속도, WHERE 절 속도차이

알굼 2024. 7. 4. 13:40
반응형

TABLE에서 INDEX 가 참조하는 컬럼이 A,B,C 일때, 아래 두 쿼리중에 실행속도는 뭐가 더 빠를까? 

1. SELECT * FROM TABLE WHERE A = 1 AND B=2 AND C=3
2. SELECT * FROM TABLE WHERE A = 1 AND C=3 AND B=2

두 쿼리의 실행 속도는 사실상 동일할 것입니다. 그 이유는 데이터베이스의 쿼리 최적화 엔진이 WHERE 절의 조건 순서를 자동으로 최적화하여 가장 효율적인 방법으로 쿼리를 실행하기 때문입니다. 옵티마이저가 똑똑해서 쿼리의 WHERE절을 살펴보고 키가 있는것을 우선 적용해 검색을 한다.

예를 들어, 다음 두 쿼리는:

  1. SELECT * FROM TABLE WHERE A = 1 AND B=2 AND C=3
  2. SELECT * FROM TABLE WHERE A = 1 AND C=3 AND B=2

이 경우, 인덱스가 컬럼 A, B, C 순으로 정의되어 있다면 데이터베이스는 이 인덱스를 사용하여 조건을 효율적으로 평가할 것입니다. WHERE 절의 조건 순서는 인덱스를 사용하는 데 있어 차이를 만들지 않습니다.

대부분의 현대적인 데이터베이스 시스템(예: Oracle, MySQL, PostgreSQL)은 쿼리 최적화 엔진이 WHERE 절의 조건을 최적의 순서로 재배열하여 인덱스를 최대한 활용할 수 있도록 합니다. 그러므로, 두 쿼리의 실행 속도는 동일하다고 볼 수 있습니다.

반응형