sql >> Database >  >> RDS >> PostgreSQL

Postgres GIST versus Btree-index

Je moet GiST gebruiken als je een andere indexmethode wilt gebruiken dan de reguliere b-tree-indexen (of hash-indexen, maar ze zouden eigenlijk niet moeten worden gebruikt). PostGIS-indexen vereisen GiST.

B-tree-indexen kunnen alleen worden gebruikt voor basisbewerkingen met betrekking tot gelijkheid of ordening, zoals = , < , <= , > , >= , <> , BETWEEN en IN . Hoewel u een b-tree-index op een meetkundig object (punt, regio, enz.) kunt maken, kan deze alleen daadwerkelijk worden gebruikt voor gelijkheid als ordeningsvergelijkingen zoals > zijn over het algemeen zinloos voor dergelijke objecten. Een GiST-index is vereist om complexere en algemenere vergelijkingen zoals "bevat", "kruist", enz. te ondersteunen.

U kunt de btree_gist gebruiken extensie om b-tree indexering voor GiST in te schakelen. Het is aanzienlijk langzamer dan gewone b-tree-indexen, maar u kunt een index met meerdere kolommen maken die zowel GiST-only typen als reguliere typen zoals text bevat. , integer , enz.

In deze situaties moet je echt explain analyze gebruiken (explain.depesz.com is hiervoor handig) om te onderzoeken hoe Pg verschillende indexen en combinaties van indexen gebruikt die u aanmaakt. Probeer verschillende kolomvolgorde in indexen met meerdere kolommen en kijk of twee of meer afzonderlijke indexen effectiever zijn.

Ik vermoed sterk dat je in dit geval de beste resultaten krijgt met de GiST-index met meerdere kolommen, maar ik zou verschillende combinaties van indexen en volgorde van indexkolommen proberen om te zien.




  1. rake db:coderingsfout maken met postgresql

  2. Nieuwe tabel maken in Laravel op basis van gebruikersinvoer?

  3. Cross-databasequery's, voegt voordelen en nadelen toe

  4. Omgaan met MySQL-replicatieproblemen met ClusterControl