Какой тип индекса лучше всего подходит для типа DATE в Oracle? - PullRequest
3 голосов
/ 11 июня 2009

Исходя из вашего опыта работы с Oracle, какой тип и параметры индекса будут наилучшими для настройки для столбца типа DATE?

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

Будет ли справедливо создать кластерный индекс?

Меня интересует оптимизация выполнения запросов, таких как SELECT * FROM Log WHERE [Date]> '20 -06-2009 'ORDER BY [Date] DESC, без массового замедления вставок. (кстати, в реальном мире я бы использовал правильный синтаксис TO_DATE, чтобы избежать усечения и пропустить индекс)

Приветствия

Ответы [ 3 ]

6 голосов
/ 11 июня 2009

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

Рассматривайте более сложные индексы только в том случае, если у вас возникли проблемы с вышеуказанным.

С уважением K

5 голосов
/ 11 июня 2009

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

Это также увеличило бы индекс, потому что разбиения блока индекса были бы 50/50 вместо 90/10, которые использует Oracle, когда обнаруживает закономерный рост в индексированных значениях.

1 голос
/ 16 июня 2009

Я бы пересмотрел разбиение в зависимости от объема данных - Oracle может использовать сокращение разделов при выполнении запроса, что также дает возможность легко архивировать старые данные журнала позже.

...