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절을 살펴보고 키가 있는것을 우선 적용해 검색을 한다. 단, 인덱스의 쿼리가 모두 조건절에 들어있어야 인덱스를 100% 활용한다고 볼 수 있다. 

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

  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 절의 조건을 최적의 순서로 재배열하여 인덱스를 최대한 활용할 수 있도록 한다. 그러므로, 두 쿼리의 실행 속도는 동일하다.

 

단, 아래와 같은 쿼리일때는 선행 컬럼인 A 를 포함하지 않기 때문에 인덱스가 적용되지 않는다.
선행컬럼을 포함해야만 인덱스가 적용된다.

1. SELECT * FROM TABLE WHERE C=1, D=1, E=1; 

반응형