2009-08-31 2 views
8

Мне интересно узнать, есть ли преимущество в производительности для разбиения числового столбца, который часто является объектом запроса. В настоящее время у меня есть материализованное представление, которое содержит ~ 50 миллионов записей. При использовании регулярного индекса b-дерева и поиска по этому числовому столбцу я получаю стоимость 7 и результаты запроса примерно через 0,8 секунды (с незагруженным кешем). После добавления глобального хэш-раздела (с 64 разделами) для этого столбца я получаю стоимость 6 и результаты запроса примерно через 0,2 секунды (опять же с незагруженным кешем).Является ли глобально разделенный индекс лучше (быстрее), чем несегментированный индекс?

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

Уверен, что, как и многие вопросы Oracle, можно ответить «зависит от этого». :) Мне интересно узнать, какие факторы я должен учитывать, чтобы определить преимущества каждого подхода.

Спасибо!

ответ

4

Я уверен, что вы нашли эту ссылку в своих исследованиях - Partitioned Tables and Indexes. Однако я даю ссылку на него, если кто-то заинтересован, это очень хороший материал о разделении.

Прямо в точку. Разделенный индекс просто разлагает индекс на куски (16 в вашей ситуации) и распространяет данные в зависимости от их хэшированного ключа секционирования. Когда вы хотите его использовать, Oracle «вычисляет» хэш ключа и определяет, в каком разделе продолжить поиск.

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

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

Смежные вопросы