sql >> Databasteknik >  >> RDS >> PostgreSQL

Flera index vs enstaka index på flera kolumner i postgresql

Oavsett hur många index du har skapat på relation, kommer bara ett av dem att användas i en viss fråga (vilket beror på fråga, statistik etc). Så i ditt fall skulle du inte få en kumulativ fördel av att skapa två enstaka kolumnindex. För att få ut mesta möjliga prestanda från index skulle jag föreslå att du använder sammansatt index på (plats, tidsstämpel).

Observera att frågor som ... WHERE timestamp BETWEEN smth AND smth kommer inte att använda indexet ovan medan frågor som ... WHERE location = 'smth' eller ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth kommer. Det beror på att det första attributet i index är avgörande för sökning och sortering.

Glöm inte att uppträda

ANALYZE;

efter att index skapats för att samla in statistik.

Uppdatering: Som @MondKin nämns i kommentarer vissa frågor kan faktiskt använda flera index på samma relation. Fråga till exempel med OR satser som a = 123 OR b = 456 (förutsatt att det finns index för båda kolumnerna). I det här fallet skulle postgres utföra bitmappsindexsökningar för båda indexen, bygga en förening av resulterande bitmappar och använda den för bitmappshögavsökning. Under vissa förhållanden kan samma schema användas för AND frågor men istället för union skulle det finnas en korsning.



  1. Öka prestanda med Bulk Collect i Oracle

  2. Vad ersätter unikidentifierare i Mysql

  3. Mysql - duplicerat inmatningsfel för nyckel med automatisk ökning

  4. Hur man får slumpmässiga rader från SQL Server Table - SQL Server / TSQL Tutorial Del 117