По словам Крейга Рингера :
Хотя обычно хорошей идеей является создание индекса для (или включая) столбцов внешнего ключа ссылочной стороны, это не обязательно. Каждый добавляемый вами индекс немного замедляет работу DML, поэтому вы платите за производительность за каждый
INSERT
,UPDATE
илиDELETE
. Если индекс используется редко, он может не иметь смысла.
Как вы определяете, превосходит ли выгода от добавления индекса его стоимость?
Вы профилируете модульные тесты до / после добавления индекса и проверяете общий прирост производительности? Или есть лучший способ?
pg_stat_user_indexes
поможет вам в этом, показывая информацию об использовании индекса. Чтобы оценить затраты на обслуживание, вы можете посмотреть на активность записи в таблицу,pg_stat_user_tables
но из-за HOT не все обновления обязательно должны будут касаться индекса, поэтому вы можете немного переоценить.Ответы:
Использование индекса зависит от структуры ваших данных и избирательности ваших данных. Если вы делаете запросы, которые не используете их, они дороги. Если вы используете их эффективно, они являются отличным инструментом. Существует планировщик запросов и аналитика планировщика запросов (
EXPLAIN
) только для планирования или планирования и выполнения команд (EXPLAIN ANALYZE
).И есть отличная онлайн-книга: используйте указатель luke о рекомендуемом использовании указателей
источник
Выберите правила и следуйте им. Например, я всегда создаю индекс на стороне ссылки внешнего ключа.
Убедитесь, что вы тестируете производительность вашего продукта в соответствии с критериями производительности, основанными на потребностях пользователей. Например, система должна обрабатывать входящую загрузку 100 запросов типа POST X в минуту.
Если вы не можете удовлетворить требования к производительности, уточните модель, возможно, нарушив практические правила в этом процессе.
источник