Pull to refresh

Comments 8

Спасибо. Было интересно почитать. Очень понравилась идея использовать при создании индекса вычисляемые значения, а не как на SQL Server — вначале создавать COMPUTED столбец, а потом по нему строить индекс:

SELECT *
FROM ...
WHERE CAST(InsertDateTime AS DATE) = '20160101'

ALTER TABLE ...
    ADD InsertDate AS CAST(InsertDateTime AS DATE)

CREATE NONCLUSTERED INDEX ix ON ... (InsertDate)

SELECT *
FROM ...
WHERE InsertDate = '20160101'
Реально очень полезный инструмент, как выяснилось. До прочтения оригинала статьи, увы, не знал о такой возможности.
Дополните пожалуйста статью. Одно из назначений функциональных индексов — это уникальность по какому либо параметру при условии. Например — у нас есть таблица с утверждаемыми документами, в которой есть поле — основание (другой документ). И есть требование — основание должно быть уникально для документов в статусе на рассмотрении и утвержден, и не уникально для черновиков и отказанных документов. Тогда нам необходимо выполнить что то типа:
CREATE UNIQUE INDEX uidx_uniq_justif ON t ( case when(status=2 or status=3) then justification_id else null end;); (не работал имено с постгрессом)
Это довольно таки частое использование function based indexes
В PostgreSQL есть более элегантное решение данной проблемы:

CREATE UNIQUE INDEX uidx_uniq_justif ON t (justification_id) WHERE status=2 or status=3;

Подробнее можно прочесть здесь
Почему-то не вставилась ссылка: http://www.postgresql.org/docs/current/static/indexes-partial.html
В Постгресе для этого существуют «частичные индексы». Подробнее можно ознакомиться документации
Ок, сорри, не знал. Я в основном с ораклом. Там это через функциональные решается.
А еще функциональные индексы крайне полезны для регистронезависимого поиска по строковому полю.
Делаем индекс на LOWER(название_поля), а в запросе пишем условие LOWER(искомая_строка) = LOWER(название_поля).
Если этого не делать, то, в отличии от MySQL, по умолчанию поиск будет регистро зависимым. И обычный индекс помочь не сможет.
Sign up to leave a comment.

Articles

Change theme settings