Индекс на (col1, col2) и Индекс на (col2, col1)
1/ В таблице, как бы index I1 on T(col1, col2)
быть отличным от index I2 on T(col2, col1)
? Можем ли мы создать оба? Возьмите например Unique Index
,
Сканирование с пропуском индекса, по- видимому, диктует важность порядка столбцов, то есть, возможно, I1 будет отличаться от I2.
В другом тексте я видел
CREATE TABLE INVOICES
(ID NUMBER(11),
INVOICE_DATE DATE,
CONSTRAINT UN_ID UNIQUE(ID, DATE) USING INDEX(CREATE INDEX I_INVOICES ON INVOICES(ID, INVOICE_DATE)),
CONSTRAINT UN_DATE UNIQUE(DATE, ID) USING INDEX I_INVOICES);
то есть оба Unique constraints (col1, col2)
а также (col2, col1)
используют то же самое index (col1, col2)
,
Некоторые идеи от всех? Мой вопрос не о том, когда мы выбираем одно над другим?
но о том, когда они сосуществуют. Являются ли они двумя разными индексами / объектами? Имеет ли значение порядок? Почему в примере используется один и тот же индекс для обоих? Было бы лучше создать другой индекс (col2, col1) помимо (col1, col2), потому что заказы имеют значение?
2 / По тому же вопросу: почему мы используем только CREATE INDEX
и не CREATE UNIQUE INDEX
? В каком случае мы используем CREATE UNIQUE INDEX
?
1 ответ
Порядок ключей для составных индексов
Следуйте этим рекомендациям для упорядочения ключей в составных индексах:
Создайте индекс, чтобы ключи, используемые в предложениях WHERE, составляли ведущую часть. Если некоторые ключи используются в предложениях WHERE чаще, то обязательно создайте индекс, чтобы наиболее часто выбранные ключи составляли ведущую часть, чтобы позволить операторам, использующим только эти ключи, использовать индекс. Если все ключи используются в предложениях WHERE одинаково часто, то упорядочение этих ключей от наиболее избирательных к наименее селективным в операторе CREATE INDEX лучше всего повышает производительность запросов. Если все ключи используются в предложениях WHERE одинаково часто, но данные физически упорядочены на одном из ключей, поместите этот ключ первым в составном индексе.
от: https://docs.oracle.com/cd/B10501_01/server.920/a96533/data_acc.htm
2 / По тому же вопросу: почему мы используем только CREATE INDEX, а не CREATE UNIQUE INDEX? В каком случае мы используем CREATE UNIQUE INDEX?
Это указывает на то, что комбинация значений в индексированных столбцах должна быть уникальной.
от: http://www.techonthenet.com/oracle/indexes.php
имейте в виду: если вы создаете уникальный ключ для таблицы, то уникальный индекс также будет создан автоматически