В базах данных , A частичный индекс , также известный как отфильтрованный индекс является индексом , который имеет некоторое условие , примененное к нему так , что она включает в себя подмножество строк в таблице .
Это позволяет индексу оставаться маленьким, даже если таблица может быть довольно большой, и иметь исключительную избирательность.
Предположим, у вас есть таблица транзакций, в которой записи начинаются с STATUS = 'A' (активен), а затем могут проходить через другие статусы ('P' для ожидания, 'W' для "обрабатываются") до достижения окончательного статуса, 'F', после чего он больше не будет обрабатываться снова.
В PostgreSQL полезный частичный индекс может быть определен как:
создать индекс partial_status в txn_table ( status ), где статус в ( 'A' , 'P' , 'W' );
Этот индекс не будет беспокоить сохранение какой-либо из миллионов строк, которые достигли «окончательного» статуса, «F», и позволит запросам, ищущим транзакции, которые все еще «нуждаются в доработке», осуществлять эффективный поиск по этому индексу.
Точно так же частичный индекс можно использовать для индексации только тех строк, в которых столбец не равен нулю, что будет полезно, когда столбец обычно равен нулю.
создать индекс partial_object_update в таблице object_table ( updated_on ), где updated_on не равен нулю ;
Этот индекс позволит следующему запросу читать только обновленные кортежи:
выберите * из таблицы_объектов, где updated_on не является нулевым порядком по updated_on ;
Необязательно, чтобы условие совпадало с критерием индекса; В статье Стоунбрейкера ниже представлен ряд примеров с указателями, подобными следующему:
создать индекс partial_salary по сотруднику ( возрасту ), где зарплата > 2100 ;
Поддержка [ править ]
В SQL Server этот тип индекса называется отфильтрованным индексом . [1] Частичные индексы поддерживаются в PostgreSQL, начиная с версии 7.2, выпущенной в феврале 2002 года. [2] SQLite поддерживает частичные индексы, начиная с версии 3.8.0. [3]
MongoDB поддерживает частичные индексы в своем последнем выпуске V3.2. [4]
MySQL версии 8.0 не поддерживает частичные индексы. В MySQL термин «частичный индекс» иногда используется для обозначения индексов префикса, где в индексе хранится только усеченный префикс каждого значения. Это еще один метод уменьшения размера индекса. [5]
Ссылки [ править ]
- ^ Документация по SQL Server 2008: Рекомендации по проектированию отфильтрованного индекса . Microsoft TechNet .
- ^ «Документация PostgreSQL: Примечания к выпуску: Выпуск 7.2» . PostgreSQL . Проверено 9 октября 2009 .
Включение частичных индексов (Мартин ван Остерхаут)
- ^ «Частичные индексы» . Проверено 4 февраля 2014 .
- ^ Примечания к выпуску MongoDB V302 .
- ^ Рональд Брэдфорд (2009-07-22). «Понимание различных реализаций индекса MySQL» .