sql >> Database >  >> RDS >> PostgreSQL

Samengestelde index met drie sleutels, wat gebeurt er als ik de middelste vraag oversla?

Postgres kan niet-leidende kolommen gebruiken in een b-tree-index, maar in een veel minder efficiënte modus.

Als de eerste kolom erg selectief is (slechts enkele rijen per A ) dan zult u nauwelijks een verschil in prestatie merken, aangezien beide toegangsmethoden (zelfs een sequentiële scan over de gereduceerde set) goedkoop zijn. De prestatiehit groeit met het aantal rijen per A .

Voor het geval dat je beschrijft, raad ik aan om de index te maken op (A, C, B) of (C, A, B) (zorg ervoor dat B komt als laatste) om de prestaties te optimaliseren. Op deze manier krijgt u de beste prestaties voor zoekopdrachten op (A, B, C) en op (A, C) gelijk.

In tegenstelling tot de volgorde van kolommen in de index, doet de volgorde van predikaten in de zoekopdracht er niet toe.

We hebben dit uitgebreid besproken op dba.SE:

Merk op dat het niet . doet maakt niet uit of je leidt met A, C of C, A voor de casus:

Er zijn ook enkele andere overwegingen, maar uw vraag bevat niet alle relevante details.



  1. Meerdere tellingen in CakePHP

  2. Moet ik echt SET XACT_ABORT ON gebruiken?

  3. Wat zijn best practices voor het voorkomen van SQL-injectie in node-mysql?

  4. 1e rij in groep door vs. laatste rij