sql >> Database teknologi >  >> RDS >> PostgreSQL

Forespørgselsplan for postgres med indekser

Denne plan:

Index Scan using Designation_place_name on myTable  (cost=0.00..67701.36 rows=22043 width=27) (actual time=0.061..3.796 rows=3376 loops=1)
   Index Cond: ((relation)::text = 'Manager'::text)
   Filter: (timeOfJoining > '1930-10-10 00:00:00+05:53:20'::timestamp with time zone)
 Total runtime: 4.082 ms
(4 rows)

Betyder grundlæggende:

  1. Brug af indekset Designation_place_name
  2. Find rækker, der passer til indeksbetingelsesrelationen ='Manager'
  3. Behold kun rækker, der matcher timeOfJoining-kriterierne

Under trin 2 tilgås disksiderne "tilfældigt" snarere end sekventielt, hvilket vil sige, at indekset indeholder adressen på matchende rækker på disken, og Postgres besøger disse adresser i den rækkefølge, som indekset angiver. (Dette kan være dyrt, forresten. Nogle gange vil planlæggeren beslutte, at det er billigere bare at læse hele tabellen (seq scan) eller batchhente alle rækker på en side, mens den ignorerer rækkefølgen angivet af indekset (bitmap indeks scan).)

Bemærk:der er ingen (tabel) joins i den forespørgsel. Havde der været en, ville du have set ekstra fordybningsniveauer. Læs dem fra mest indrykket til mindst indrykket.



  1. vælg count(*) fra tabellen over mysql i php

  2. Oracle SQL - Konverter N rækkers kolonneværdier til N kolonner i 1 række

  3. Begår du disse fejl, når du bruger SQL CURSOR?

  4. Viser forskellige værdier med aggregater