Что означает единый индекс из двух частей? - PullRequest
4 голосов
/ 30 августа 2011

Как правило, каждый индекс в таблице замедляет вставки в таблицу в три раза;два индекса обычно делают вставку в два раза медленнее, чем один индекс.(Тем не менее, одиночный индекс из двух частей не намного хуже, чем одиночный индекс из одной части).

Я получил это из книги Советы и приемы по настройке производительности Oracle 9i Ричард Немец (Осборн Оракул Пресс Серис).

Что означают следующие термины:

  1. Индекс, состоящий из двух частей
  2. Индекс, состоящий из одной части
  3. Существуют ли еще какие-либо виды индексов?

.

Ответы [ 3 ]

7 голосов
/ 30 августа 2011

Под двухчастным индексом я предполагаю, что Rich означает составной индекс, то есть индекс, построенный на нескольких столбцах. Как это:

 create index t23_t_idx on t23 (col4, col2);

В то время как один индекс детали индексирует один столбец:

create index t23_s_idx on t23(col1);

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

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

Мы можем создать индексы на основе функций, которые позволят нам индексировать результаты детерминированной функции (то есть той, которая гарантированно даст тот же результат для данного ввода). Вот как мы можем построить индекс по столбцу даты, который игнорирует элемент времени:

create index t23_fbi_idx on t23( trunc(col_34));

Мы также можем создавать доменные индексы для текстовых столбцов. И есть специальные индексы для секционированных таблиц.

Все это более подробно описано в документации. Узнайте больше .

5 голосов
/ 30 августа 2011

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

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

CREATE TABLE t1 (
  col1 NUMBER,
  col2 NUMBER,
  col3 NUMBER
);

CREATE INDEX t1_composite_idx 
    ON t1( col1, col2 );

С другой стороны, если вы создаете отдельные индексы для каждого столбца по отдельности, Oracle должен поддерживать две отдельные структуры индекса, что примерно вдвое увеличивает объем обслуживания индекса, необходимого

CREATE TABLE t1 (
  col1 NUMBER,
  col2 NUMBER,
  col3 NUMBER
);

CREATE INDEX t1_idx1
    ON t1( col1 );

CREATE INDEX t1_idx2
    ON t1( col2 );

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

Существуют ли еще виды индексов?

Что касается вашего последнего вопроса - у Oracle довольно много разных типов индексов (особенно если мы считаем составные индексы индексами другого типа). Этот ответ был посвящен исключительно индексам b * -дерева, которые обычно имеют в виду люди, когда ссылаются на «индексы» без квалификаторов. Однако Oracle поддерживает ряд различных типов индексов - индексы дерева b *, растровые индексы, текстовые индексы и т. Д. Он создает индексы больших объектов. Он поддерживает определяемые пользователем расширяемые индексы. И в каждом типе индекса часто есть десятки различных вариантов. Например, вы можете создать индекс b * -дерева на основе функций или индекс соединения растровых изображений, вы можете указать пользовательские лексеры для индекса Oracle Text или определить собственную структуру индекса для своего собственного пользовательского типа.

4 голосов
/ 30 августа 2011

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

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