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

Postgres GIST срещу Btree индекс

Трябва да използвате GiST, ако искате да използвате който и да е метод на индексиране, различен от обикновените индекси на b-дърво (или хеш индекси, но те всъщност не трябва да се използват). PostGIS индексите изискват GiST.

Индексите на B-дърво могат да се използват само за основни операции, включващи равенство или подреждане, като = , < , <= , > , >= , <> , МЕЖДУ и IN . Въпреки че можете да създадете индекс на b-дърво на геометричен обект (точка, регион и т.н.), той всъщност може да се използва само за равенство като подреждане на сравнения като > като цяло са безсмислени за такива обекти. Необходим е GiST индекс, за да поддържа по-сложни и общи сравнения като "съдържа", "пресича" и т.н.

Можете да използвате btree_gist разширение за активиране на индексиране на b-дърво за GiST. Той е значително по-бавен от обикновените индекси на b-дърво, но ви позволява да създадете индекс с няколко колони, който съдържа както типове само за GiST, така и обикновени типове като text , цяло число и т.н.

В тези ситуации наистина трябва да използвате explain анализ (explain.depesz.com е полезно за това), за да проучите как Pg използва различни индекси и комбинации от индекси, които създавате. Опитайте различно подреждане на колони в индекси с няколко колони и вижте дали два или повече отделни индекса са по-ефективни.

Силно подозирам, че ще получите най-добри резултати с многоколонния 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. Невалидна стойност за грешка на Postgres за параметър TimeZone:UTC

  2. Как да внедрите Select For Update в EF Core

  3. `WHERE col IN` с именувани параметри

  4. Entity Framework Core jsonb тип колона

  5. Пагинацията на Django Rest Framework се отчита изключително бавно