В базах данных частичный индекс , также известный как отфильтрованный индекс, представляет собой индекс , к которому применено некоторое условие, так что он включает подмножество строк в таблице .
Это позволяет индексу оставаться небольшим, даже если таблица довольно большая, и обладать чрезвычайной селективностью.
Предположим, у вас есть таблица транзакций, записи в которой начинаются со СТАТУСА = «A» (активно), а затем могут проходить через другие статусы («P» — ожидание, «W» — «в обработке»), прежде чем достигнуть конечного статуса «F», после которого обработка, скорее всего, уже невозможна.
В PostgreSQL полезный частичный индекс может быть определен следующим образом:
создать индекс partial_status для txn_table ( status ) , где status in ( 'A' , 'P' , 'W' );
Этот индекс не будет хранить ни одной из миллионов строк, достигших «финального» статуса «F», и позволит запросам, ищущим транзакции, которые все еще «нуждаются в доработке», эффективно выполнять поиск с помощью этого индекса.
Аналогично, частичный индекс можно использовать для индексации только тех строк, где столбец не равен нулю, что будет полезно, если столбец обычно равен нулю.
создать индекс partial_object_update для object_table ( updated_on ), где updated_on не равен null ;
Этот индекс позволит следующему запросу читать только обновленные кортежи:
выберите * из object_table , где updated_on не равен null , упорядочите по updated_on ;
Не обязательно, чтобы условие совпадало с критерием индекса; в статье Стоунбрейкера ниже представлен ряд примеров с индексами, подобными следующим:
создать индекс partial_salary для сотрудника ( возраст ) , где зарплата > 2100 ;
В SQL Server этот тип индекса называется фильтрованным индексом . [1]
Частичные индексы поддерживаются в PostgreSQL с версии 7.2, выпущенной в феврале 2002 года. [2]
SQLite поддерживает частичные индексы начиная с версии 3.8.0. [3]
MongoDB поддерживает частичные индексы начиная с версии 3.2. [4]
Включение частичных индексов (Мартин ван Остерхаут)