더북(TheBook)

BETTER WAY 14 데이터의 부분 집합을 포함하거나 제외하려면 필터링된 인덱스를 사용하자

쿼리에 사용되는 테이블의 모든 로우를 반환하기 싫다면 WHERE 절을 추가한다. 이때는 일부 로우만 반환되지만 결과를 얻는 I/O 작업량이 반드시 줄어들지는 않는다.

필터링된 인덱스(SQL Server)나 부분(Partial) 인덱스(PostgreSQL)는 비클러스터드 인덱스이며, 테이블에 있는 일부 로우의 집합만 포함한다. 일반적으로 이들은 테이블의 로우 개수와 인덱스의 로우 개수 비율이 1:1인 전통적인 비클러스터드 인덱스에 비해 훨씬 적은 용량을 차지하므로, 필터링된 인덱스는 성능과 저장 용량이라는 두 마리 토끼를 잡을 수 있다. 인덱스에 있는 로우의 개수가 적어서 필요한 I/O 작업도 적기 때문이다. 이 기능을 지원하는 DBMS는 테이블 파티셔닝도 필터링된 인덱스와 비슷한 방식으로 사용한다.

Note ≣

액세스(적어도 2016 버전까지)와 MySQL(적어도 5.6 버전까지)은 필터링된 인덱스를 지원하지 않는다.

Note ≣

오라클과 DB2도 필터링된 인덱스를 지원하지 않지만 비슷한 기능을 구현할 수는 있다.

 

 

 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.