BETTER WAY 14 데이터의 부분 집합을 포함하거나 제외하려면 필터링된 인덱스를 사용하자
쿼리에 사용되는 테이블의 모든 로우를 반환하기 싫다면 WHERE 절을 추가한다. 이때는 일부 로우만 반환되지만 결과를 얻는 I/O 작업량이 반드시 줄어들지는 않는다.
필터링된 인덱스(SQL Server)나 부분(Partial) 인덱스(PostgreSQL)는 비클러스터드 인덱스이며, 테이블에 있는 일부 로우의 집합만 포함한다. 일반적으로 이들은 테이블의 로우 개수와 인덱스의 로우 개수 비율이 1:1인 전통적인 비클러스터드 인덱스에 비해 훨씬 적은 용량을 차지하므로, 필터링된 인덱스는 성능과 저장 용량이라는 두 마리 토끼를 잡을 수 있다. 인덱스에 있는 로우의 개수가 적어서 필요한 I/O 작업도 적기 때문이다. 이 기능을 지원하는 DBMS는 테이블 파티셔닝도 필터링된 인덱스와 비슷한 방식으로 사용한다.
Note ≣
액세스(적어도 2016 버전까지)와 MySQL(적어도 5.6 버전까지)은 필터링된 인덱스를 지원하지 않는다.