sql >> Database >  >> RDS >> PostgreSQL

postgres gebruikt alleen gesorteerde index voor het opvragen van de tabel met 5m-records

Wijzig de zoekopdracht in

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

en gebruik deze index:

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

Uitleg:OR is een prestatieprobleem . Door het te herschrijven als een lexicografische vergelijking van paren, verwijder je de OR , en een eenvoudige indexscan vindt de rijen efficiënt. PostgreSQL komt niet langer in de verleiding om de index te gebruiken die de ORDER BY ondersteunt .




  1. mySQL:Levenshtein-afstand gebruiken om duplicaten in 20.000 rijen te vinden

  2. Voorkom dat mysql-caststring naar int in where-clausule

  3. Hoe u uw MySQL- of MariaDB-database zeer beschikbaar maakt op AWS en Google Cloud

  4. Sla het queryresultaat op in een variabele met behulp van in PL/pgSQL