Как индексы влияют на производительность запросов?

12

Очевидно, что сохранение нескольких разных индексов отрицательно влияет на производительность вставки и удаления. Как насчет производительности запросов: имеет ли смысл вообще хранить слишком много индексов в таблице? Повысится ли производительность запросов в любом случае с добавленным индексом (конечно, для запросов, использующих индекс вообще) или даже возможно, что производительность запросов снизится из-за слишком большого числа индексов, потому что становится необходимым сверяться со всеми индексами, чтобы получить результат?

Если в таблице присутствуют разные индексы: будут ли они все учитываться или только с точки зрения оптимизатора? Реализует ли Oracle многомерные индексы?

paweloque
источник
2
почему бы вам не проверить это и сообщить о результатах? :)
Нил Макгиган
Я сделаю завтра :)
Paweloque
2
Индексы не обязательно замедляют удаление, они также могут ускорить их (как обновления могут использовать индекс)
a_horse_with_no_name
@ главный, какой смысл изобретать велосипед? так что да, эффект производительности запроса находится под вопросом, хотя мы точно знаем, что это повлияет на вставки / удаления. Как насчет обновлений? они будут затронуты отрицательно?
Санграм

Ответы:

15

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

В Руководстве по концепциям Oracle приведены критерии создания индекса.

В общем, рассмотрите возможность создания индекса для столбца в любой из следующих ситуаций:

  • Индексированные столбцы часто запрашиваются и возвращают небольшой процент от общего числа строк в таблице.

  • На индексированном столбце или столбцах существует ограничение ссылочной целостности. Индекс - это способ избежать полной блокировки таблицы, которая в противном случае потребовалась бы в случае обновления первичного ключа родительской таблицы, слияния с родительской таблицей или удаления из родительской таблицы.

  • В таблицу будет помещено ограничение уникального ключа, и вы хотите вручную указать индекс и все параметры индекса.

Все индексы будут рассматриваться в том смысле, что все индексы в таблицах в запросе проверяются, чтобы определить, можно ли их использовать. Те, которые могли бы быть, далее исследованы, чтобы определить полезность.

Ли Риффель
источник
7

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

Gaius
источник
0

Я нашел это в выборе индекса стратегии из Руководства Application разработчика . Эта страница о «выборе стратегии индекса»:

Ограничить количество индексов для каждой таблицы

Чем больше индексов, тем больше накладных расходов происходит при изменении таблицы. Когда строки вставляются или удаляются, все индексы в таблице должны быть обновлены. При обновлении столбца все индексы в столбце должны быть обновлены.

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

Sangram
источник
2
Из вопроса: «Очевидно, что несколько разных индексов отрицательно влияют на производительность вставки и удаления. Как насчет производительности запросов»,
говорит Джек, попробуйте topanswers.xyz