정렬 인덱스
아래와 같은 쿼리를 사용해서 순서가 정렬된 인덱스를 생성할 수 있다.
CREATE INDEX ix_teamname_userscore ON employees (team_name ASC, user_score DESC);
이 때, 인덱스를 최대값부터 읽으면 오름차순으로, 거꾸로 읽으면 내림차순으로 읽을 수 있으며 위처럼 생성된 인덱스의 경우 Order By를 사용할 때 정렬하는 로직을 생략할 수 있다.
만약에 ASC나 DESC를 생략하면 ASC로 인덱스가 생성된다.
- 오름차순 인덱스 : 작은 값의 인덱스 키가 B-Tree의 왼쪽으로 정렬된 인덱스
- 내림차순 인덱스 : 큰 값의 인덱스 키가 B-Tree의 왼쪽으로 정렬된 인덱스
- 인덱스 정순 스캔 : 인덱스 키의 크고 작음에 관계없이 리프 노드의 왼쪽 페이지부터 오른쪽으로 스캔
- 인덱스 역순 스캔 : 인덱스 키의 크고 작음에 관계없이 리프 노드의 오른쪽 페이지부터 왼쪽으로 스캔
⚠️ 당연한 얘기지만 정순 스캔이 무조건 빠르다.
인덱스 가용성
인덱스는 전체 일치 또는 좌측 일부 일치와 같은 검색만 가능
select * from employees where team_name = 'A'; -- 인덱스 사용 가능
select * from employees where team_name like 'A%'; -- 인덱스 사용 가능
select * from employees where team_name like '%A'; -- 인덱스 사용 불가능
select * from employees where team_name like '%A%'; -- 인덱스 사용 불가능