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

PostgreSQL GIN индекс по-бавен от GIST за pg_trgm?

Някои проблеми се открояват:

Първо, помислете за надграждане до текуща версия на Postgres . Към момента на писане това е pg 9.6 или pg 10 (в момента бета). От Pg 9.4 има множество подобрения за GIN индексите, допълнителния модул pg_trgm и големите данни като цяло.

След това имате нужда от много повече RAM , по-специално по-висок work_mem настройка. Мога да разбера от този ред в EXPLAIN изход:

Heap Blocks: exact=7625 lossy=223807

"загубено" в подробностите за сканиране на купчина растерни изображения (с вашите конкретни числа) показва драматичен недостиг на work_mem . Postgres събира само адреси на блокове в сканирането на растерния индекс вместо указатели на редове, защото се очаква това да бъде по-бързо с вашия нисък work_mem настройка (не може да съдържа точни адреси в RAM). Много повече редове, които не отговарят на условията, трябва да бъдат филтрирани в следното Сканиране на купчина растерни изображения насам. Този свързан отговор съдържа подробности:

Но не задавайте work_mem също високо, без да се отчита цялата ситуация:

Възможно е да има други проблеми, като раздуване на индекс или таблица или повече затруднения в конфигурацията. Но ако коригирате само тези два елемента, заявката трябва да бъде много вече по-бързо.

Също така, наистина ли трябва да извлечете всички 40k реда в примера? Вероятно искате да добавите малък LIMIT към заявката и я направете търсене на „най-близкия съсед“ – в който случай GiST индексът е по-добрият избор в крайна сметка, защото това се предполага, че е по-бърз с GiST индекс. Пример:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python:Извличане на резултати от заявка на PostgreSQL като форматирани JSON стойности

  2. Общо решение Ruby за SQLite3 LIKE или PostgreSQL ILIKE?

  3. Как работи Ceiling() в PostgreSQL

  4. Няма liblwgeom при използване на postgresql84 и postgis на Snow Leopard с MacPorts

  5. Грешка в PostGIS:Не може да се избере функция с най-добър кандидат