Индекс против раздела

20

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

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

paweloque
источник
2
Вместо того, чтобы думать об индексации и секционировании как об одном или о решениях для повышения производительности, вы должны думать об обоих инструментах, которые можно использовать по отдельности или совместно для повышения производительности вашей базы данных.
ScottCher

Ответы:

18

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

Оптимизатор может использовать сканирование таблицы для некоторых разделов и индексы для других. Я не видел никаких планов объяснения, которые указывают на то, что происходит.

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

BillThor
источник
3
Я создаю разделы. Обязательно выберите правильное устройство хранения для каждого раздела. Поместите фактический раздел данных на высокоскоростной диск и старый тип другого типа.
Нико
7

Чтобы ответить прямо на ваш последний вопрос: нет, я не думаю, что они эквивалентны. Подумайте об очень большой таблице (десятки ГБ), в которой нужно будет искать данные за день. Используя ежедневные разделы, вы будете сканировать только данные за этот день без каких-либо штрафов за пробел, в то время как индекс - это отдельная структура, которая может не содержать достаточно информации (а также занимает место, что является проблемой, когда речь идет о больших базах данных) или может не выполняться. достаточно избирательно.

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

Мэриан
источник