Почему невозможно добиться повышения производительности только с помощью индексов, поэтому становятся необходимыми другие методы, такие как разбиение таблиц? Вопрос касается только производительности, конечно, разные разделы могут быть помещены в разные табличные пространства, что имеет другие эффекты, которые не могут быть достигнуты с помощью индексов.
Или, другими словами, только с точки зрения производительности: возможно ли добиться таких же улучшений производительности с индексами, как и с разделением таблиц?
oracle
performance
paweloque
источник
источник
Ответы:
Нет, разбиение позволяет ограничить некоторые просмотры таблиц определенным разделом. Индексы, как правило, бесполезны, если вы будете возвращать от 2 до 4 процентов данных таблицы. Если ваш критерий выбора позволяет локализовать запрос для определенного раздела, то другие разделы не нужно сканировать.
Оптимизатор может использовать сканирование таблицы для некоторых разделов и индексы для других. Я не видел никаких планов объяснения, которые указывают на то, что происходит.
Если у вас много исторических данных, то запросы на текущие данные могут быть построены так, чтобы ограничить разделы, которые считаются разделами, содержащими текущие данные.
источник
Чтобы ответить прямо на ваш последний вопрос: нет, я не думаю, что они эквивалентны. Подумайте об очень большой таблице (десятки ГБ), в которой нужно будет искать данные за день. Используя ежедневные разделы, вы будете сканировать только данные за этот день без каких-либо штрафов за пробел, в то время как индекс - это отдельная структура, которая может не содержать достаточно информации (а также занимает место, что является проблемой, когда речь идет о больших базах данных) или может не выполняться. достаточно избирательно.
В любом случае, индексы и разделы не конкурируют за одинаковые преимущества в использовании и производительности. Вы должны найти баланс в вашей базе данных.
источник