Одна важная вещь, которую следует иметь в виду при использовании индексов (помимо вышеупомянутой части «фактического использования»), это понятие селективности.
При создании индексов вы хотите создать индексы для столбцов, которые имеют хорошие шансы на «высокую селективность». Это требует некоторого понимания данных в столбце (которые вы можете иметь или не иметь в зависимости от ваших знаний о домене / доступности образцов данных).
Селективность = количество различных значений / общее количество строк
Позволяет использовать таблицу «Люди» со столбцами для имени, фамилии, пола, возраста
Например, создание индекса для столбца, такого как Gender (где пол ограничен до NULL, M или F), не даст большого преимущества во время запроса (особенно если запрос уже приводит к сканированию таблицы по другим причинам) , В любом случае селективность этого индекса будет чрезвычайно низкой. В зависимости от СУБД использование этого индекса может фактически быть хуже, чем полное сканирование таблицы.
Однако создание составного индекса для (Given_name, Surname) обеспечит преимущества при выполнении запросов к этим столбцам. Селективность этого индекса (для большинства групп населения) была бы довольно хорошей.
Индекс с селективностью 1 является идеальным, однако единственный способ достичь селективности 1 - это иметь уникальный индекс для столбца, который не может быть равен нулю.
Также имейте в виду, что вы можете легко писать запросы, чтобы «отслеживать» ваши индексы и их избирательность.