TIL

8.3 B-Tree 인덱스 정렬과 효율성

8.3.6 B-Tree 인덱스의 정렬 및 스캔 방향

인덱스 생성 시 정렬 규칙에 따라 오름차순 또는 내림차순으로 정렬되어 저장된다. 오름차순으로 생성되어도 내림차순으로 읽을 수도 있고 이는 옵티마이저의 실행 계획에 따라 결정된다.

인덱스의 정렬

CREATE INDEX ix_teamname_userscore ON employyes (team_name ASC, user_score DESC);

인덱스 스캔 방향

-- // first_name ASC로 인덱스가 설정되어 있을 때
-- // 아래와 같은 쿼리를 실행하면 인덱스를 역순으로 접근해 첫 번째 레코드만 읽게 된다.
SELECT * FROM employees ORDER BY first_name DESC LIMIT 1;

내림차순 인덱스

8.3.7 B-Tree 인덱스의 가용성과 효율성

비교 조건의 종류와 효율성

SELECT * FROM dept_emp WHERE dept_no='d002' AND emp_no>=10114;

공식적인 명칭은 아니지만 케이스 A의 dept_no='d002' AND emp_no>=10114와 케이스 B의 emp_no≥10114 같은 작업의 범위를 결정하는 조건을 작업 범위 결정 조건이라고 한다. 작업 범위 결정 조건이 많을수록 쿼리 성능을 높일 수 있다.

인덱스의 가용성과 효율성 판단

MySQL에서는 NULL도 인덱스에 저장될 수 있다. 때문에 IS NULL 조건은 작업 범위 결정 조건으로 사용할 수 있다.