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

10

По словам Крейга Рингера :

Хотя обычно хорошей идеей является создание индекса для (или включая) столбцов внешнего ключа ссылочной стороны, это не обязательно. Каждый добавляемый вами индекс немного замедляет работу DML, поэтому вы платите за производительность за каждый INSERT, UPDATEили DELETE. Если индекс используется редко, он может не иметь смысла.

Как вы определяете, превосходит ли выгода от добавления индекса его стоимость?

Вы профилируете модульные тесты до / после добавления индекса и проверяете общий прирост производительности? Или есть лучший способ?

Гили
источник
pg_stat_user_indexesпоможет вам в этом, показывая информацию об использовании индекса. Чтобы оценить затраты на обслуживание, вы можете посмотреть на активность записи в таблицу, pg_stat_user_tablesно из-за HOT не все обновления обязательно должны будут касаться индекса, поэтому вы можете немного переоценить.
Крейг Рингер
@CraigRinger, это очень полезно. Спасибо!
Гили
Я полагаюсь на pgBadger почти исключительно. И моя кишка.
Colin 't Hart

Ответы:

4

Использование индекса зависит от структуры ваших данных и избирательности ваших данных. Если вы делаете запросы, которые не используете их, они дороги. Если вы используете их эффективно, они являются отличным инструментом. Существует планировщик запросов и аналитика планировщика запросов ( EXPLAIN) только для планирования или планирования и выполнения команд ( EXPLAIN ANALYZE).

И есть отличная онлайн-книга: используйте указатель luke о рекомендуемом использовании указателей

Младен Узелац
источник
4
Правило больших пальцев хорошее, но слишком общее в этом случае. Я ищу конкретный инструмент / измерение, которое предложит добавить / удалить индексы на основе фактического поведения приложения во время выполнения.
Гили
Может быть, это именно тот инструмент, который вы ищете: предприимчивый.com
products-services-
1

Выберите правила и следуйте им. Например, я всегда создаю индекс на стороне ссылки внешнего ключа.

Убедитесь, что вы тестируете производительность вашего продукта в соответствии с критериями производительности, основанными на потребностях пользователей. Например, система должна обрабатывать входящую загрузку 100 запросов типа POST X в минуту.

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

аллюр
источник