Как стать автором
Обновить

Комментарии 4

В статье все очень сильно упрощено.

К примеру можно рассмотреть такой случай:

SELECT * FROM humans
where age = 18
and birthday_year = 1990

и аналогично

SELECT * FROM humans
where age = 18
and birthday_year = 1980

как селективность будет рассчитана в таких случаях.

Ну и конечно ссылку. Это про Оракл. Но лучше все равно ничего не написано. А работают индексы везде при мерно одинаково.
В приведенном примере у БД нет шансов увидеть корреляцию между значениями двух полей таблицы. И, соответственно, план запроса будет строиться из общих соображений. Увидев селективность по каждому из индексов, общее количество строк в таблице и другие параметры, БД может:

  1. не использовать ни один из индексов;
  2. использовать один из индексов;
  3. использовать оба индекса.
То есть если кратко может быть все что угодно :)
И любое поведение будет неправильным.
Обзор подобных случаев был бы гораздо интереснее чем простенькое описание поведения в штатной ситуации.
Мой пост ни в коем случае не претендовал на полноту охвата вопроса, а просто поднимал проблему, которую многие (на моем личном опыте) совсем не понимают, считая наличие индекса панацеей от всех проблем.

То что касается моего ответа на предыдущий пост — да, может быть всё, что угодно, и это зависит не только от запроса/схемы базы данных, но и от данных таблицы, а они могут быть разными. Также влияет настройка оптимизатора и т.п. Тут нет четкой границы вида «100» записей и индекс начнет работать или наоборот. С другой стороный, очевидно, что в таблице из двух строк база данных никогда не будет использовать ни один индекс (это крайний случай).
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории