Это хорошая идея для индексации столбца даты в порядке убывания? - PullRequest
6 голосов
/ 20 июня 2011

В большинстве таблиц, имеющих столбец даты, мы "обычно" запрашиваем свежую информацию.

Является ли хорошей идеей индексировать столбец даты «как правило» в порядке убывания?

Ответы [ 2 ]

8 голосов
/ 21 июня 2011

Не знаком с внутренностями Oracle, но вот мое понимание того, как он работает с Postgres:

Индексы сгруппированы для всех намерений и целей. Таким образом, если вы упорядочены как asc и новые строки всегда добавляются в конце (например, созданный_каталог, обновленный_каталог, billed_at и т. Д.), Ваши новые строки будут добавляться (или почти), а не добавляться (приводя к странице на диске). расщепляется). Это быстрее.

Ваш планировщик запросов будет рад прочитать индекс в обратном порядке. Так что, если это индекс одного столбца, любой из них работает - используйте наиболее естественное, когда речь идет о том, как новые строки вставляются в ваш сценарий использования.

Если индекс, упорядоченный в обратном порядке, может стать интересным, это когда у вас есть индекс в несколько столбцов. Скажем, (id, created_at desc) в таблице журнала аудита. На самом деле это плохой пример, но вот в чем суть: если вы упорядочиваете по id, created_at desc, индекс будет использоваться как есть.

4 голосов
/ 21 июня 2011

Если вы не видите существенного улучшения производительности, вы можете хотеть избежать нисходящих индексов.Нисходящие индексы на самом деле являются индексами на основе функций и имеют несколько ограничений.

Например, согласно Справочнику SQL уникальные нисходящие индексы не допускают множественных нулей, а нисходящие индексы не используются, пока вы не проанализируете индекс и таблицу.(Хотя я не могу воспроизвести второе ограничение.)

Кроме того, индексы на основе функций немного отличаются и имеют тенденцию нарушать сценарии обслуживания индекса, которые все пишут.Это не хорошая причина избегать их, просто что-то, на что нужно обратить внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...