sql >> Database >  >> RDS >> PostgreSQL

Meerdere indexen versus enkele index op meerdere kolommen in postgresql

Ongeacht hoeveel indices je hebt gemaakt op relatie, er zal er maar één worden gebruikt in een bepaalde zoekopdracht (welke afhankelijk is van zoekopdracht, statistieken, enz.). In uw geval zou u dus geen cumulatief voordeel halen uit het maken van twee indices met één kolom. Om de meeste prestaties uit index te halen, raad ik aan om de samengestelde index te gebruiken op (locatie, tijdstempel).

Merk op dat zoekopdrachten zoals ... WHERE timestamp BETWEEN smth AND smth zal de bovenstaande index niet gebruiken tijdens zoekopdrachten zoals ... WHERE location = 'smth' of ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth zullen. Het is omdat het eerste attribuut in index cruciaal is voor zoeken en sorteren.

Vergeet niet op te treden

ANALYZE;

na het aanmaken van een index om statistieken te verzamelen.

Bijwerken: Als @MondKin vermeld in opmerkingen kunnen bepaalde zoekopdrachten meerdere indexen voor dezelfde relatie gebruiken. Vraag bijvoorbeeld met OR clausules zoals a = 123 OR b = 456 (ervan uitgaande dat er indexen zijn voor beide kolommen). In dit geval zou postgres bitmapindexscans voor beide indexen uitvoeren, een unie van resulterende bitmaps bouwen en deze gebruiken voor bitmap-heapscan. Onder bepaalde voorwaarden kan hetzelfde schema worden gebruikt voor AND vragen, maar in plaats van vereniging zou er een kruising zijn.



  1. DataTables pagina 2 van paginering roept Magnific Popup niet op

  2. Hoe rijen strings af te korten met een scheidingsteken voor meerdere tekens?

  3. Selecteren waar meerdere voorwaarden overeenkomen met SafeMysql

  4. Mijn SQL converteren naar Int wanneer het niet zou moeten O.o