Вопрос

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

Это было полезно?

Решение

Я должен сначала поставить самую избирательную колонку

По словам Тома, Селективность столбцов не имеет воздействия производительности для запросов, которые используют все столбцы в индексе (он влияет на способность Oracle сжать индекс).

Это не первое, это не самое главное. Конечно, это что-то подумать, но это относительно далеко туда в Гранд-схеме вещей.

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

а) довольно редкий б) действительно зависит от значений, используемых во время выполнения, так как все перекошенные запросы

Таким образом, вообще посмотрите на вопросы, которые у вас есть, попробуйте минимизировать индексы, которые вам нужно на основе этого.

Количество различных значений в столбце в контактном индексе не актуальны при рассмотрении позиции в индексе.

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

Как вы используете индекс - это то, что актуально при принятии решения.

Все остальные вещи равны, я все равно поставил самый избирательный столбец сначала. Это просто чувствует себя правильно ...

Обновлять: Еще одна цитата из Тома (Благодаря милану за поиск его).

В Oracle 5 (да, версия 5!), Был аргумент для установки самых избирательных столбцов в первую очередь.

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

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

Другие советы

Вы можете опустить столбцы справа налево при использовании индекса, т. Е. Когда у вас есть индекс col_a, col_b Вы можете использовать его в WHERE col_a = x Но вы не можете использовать его в WHERE col_b = x.

Представьте, чтобы иметь телефонную книгу, которая отсортирована по именам а потом по фамилиям.

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

Заказ колонн в индексе должен быть определен вашими запросами, а не какими-либо соображениями селективности. Если у вас есть индекс (A, B, C), и большинство ваших сторонних запросов столбцов находятся против столбца C, а затем A, затем поместите их в порядке C, A, B в определении индекса для лучшей эффективности Отказ Oracle предпочитает использовать передний край индекса для запроса, но может использовать другие столбцы в индексе в менее эффективном пути доступа, известного как Skip-Scan.

Чем больше избирательного является ваш индекс, самый быстрый - это исследование.

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

Таким образом, вы должны сначала дать самые селективные столбцы, чтобы избежать как можно больше этой проблемы.

Кроме того, вы должны убедиться, что ваши запросы правильно используют эти «критерии селективности».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top