sql >> Databasteknik >  >> RDS >> PostgreSQL

postgres använder endast sorterat index för att fråga 5m posttabell

Ändra frågan till

WHERE NOT emails."$$meta.deleted" = FALSE
  AND (emails."$$meta.created", emails.key) >
      ('2018-02-13T14:30:35.679075Z', '8c0a3151-bf17-490f-8124-d93f7482624f')

och använd detta index:

CREATE INDEX ON emails ("$$meta.created", key)
   WHERE NOT emails."$$meta.deleted";

Förklaring:OR är ett prestandaproblem . Genom att skriva om det som en lexikografisk jämförelse av par, blir du av med OR , och en enkel indexskanning hittar raderna effektivt. PostgreSQL är inte längre frestad att använda indexet som stöder ORDER BY .




  1. Sammanfoga tabeller från olika databaser (PostgreSQL)

  2. Komplexa WHERE-satser som använder PHP Doctrin ORM

  3. Oracle flytta kolumnen till den första positionen

  4. Vilken post kommer GROUP BY att välja i SQL