Я должен поставить самый селективный столбец первым
Согласно Тому избирательность столбцов не влияет на производительность для запросов, которые используют все столбцы в индексе (это влияет на способность Oracle сжимать индекс).
это не первое, это не самое главное.конечно, это то, что нужно учитывать, но это относительно далеко внизу в общей схеме вещей.
В некоторых странных, очень своеобразных и ненормальных случаях (как, например, выше с действительно сильно искаженными данными), избирательность можетлегко иметь значение ОДНАКО, они
а) довольно редко б) действительно зависят от значений, используемых во время выполнения, так как все искаженные запросы
, так что в общем, посмотрите на ваши вопросы, попробуйтечтобы минимизировать индексы, которые вам нужны, основываясь на этом.
Количество различных значений в столбце в объединенном индексе не имеет значения при рассмотрении позиции в индексе.
Однако эти соображения должны стоять на втором месте при выборе столбца индексапорядок.Более важно убедиться, что индекс может быть полезен для многих запросов, поэтому порядок столбцов должен отражать использование этих столбцов (или их отсутствие) в предложениях where ваших запросов (по причине, показанной AndreKR).
КАК ВЫ ИСПОЛЬЗУЕТЕ индекс - это то, что имеет значение при принятии решения.
При прочих равных условиях я бы по-прежнему поставил наиболее селективный столбец первым.Он просто чувствует себя хорошо ...
Обновление: Еще одна цитата от Тома (спасибо Милану за его поиск).
InВ Oracle 5 (да, версия 5!) Был аргумент для размещения наиболее селективных столбцов сначала в индексе.
С тех пор неверно, что размещение самых различающих записей в индексе будет первыминдекс меньше или эффективнее.Кажется, что так и будет, но не будет.
При сжатии ключа индекса есть веский аргумент, чтобы пойти другим путем, так как он может уменьшить индекс.Однако это должно зависеть от того, как вы используете индекс, как указано ранее.