PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да принудя Postgres да използва конкретен индекс?

Ако приемем, че питате за обичайната функция за „подсказки за индекси“, която се намира в много бази данни, PostgreSQL не предоставя такава функция. Това беше съзнателно решение, взето от екипа на PostgreSQL. Добър преглед на това защо и какво можете да направите вместо това можете да намерите тук. Причините са основно, че това е хак за производителност, който има тенденция да създава повече проблеми по-късно, когато данните ви се променят, докато оптимизаторът на PostgreSQL може да преоцени плана въз основа на статистиката. С други думи, това, което днес може да бъде добър план за заявка, вероятно няма да бъде добър план за заявка за всички времена, а подсказките за индекс налагат конкретен план за заявка за всички времена.

Като много тъп чук, полезен за тестване, можете да използвате enable_seqscan и enable_indexscan параметри. Вижте:

  • Проучване на използването на индекс
  • enable_ параметри

Те не са подходящи за текуща производствена употреба . Ако имате проблеми с избора на план за заявка, трябва да видите документацията за проследяване на проблеми с производителността на заявката. Не задавайте просто enable_ параметри и си тръгнете.

Освен ако нямате много основателна причина да използвате индекса, Postgres може да прави правилния избор. Защо?

  • За малки таблици е по-бързо да правите последователни сканирания.
  • Postgres не използва индекси, когато типовете данни не съвпадат правилно, може да се наложи да включите подходящи прехвърляния.
  • Настройките на вашия плановик може да причиняват проблеми.

Вижте също тази стара публикация в дискусионната група.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пресичане на множество масиви в PostgreSQL

  2. Има ли удар в производителността при използване на десетични типове данни (MySQL / Postgres)

  3. Изберете най-добрите три стойности във всяка група

  4. Връщане на списък с часови зони, поддържани от PostgreSQL

  5. Как да маркирате определен брой редове в таблицата при едновременен достъп