PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Abfrageplan von Postgres mit Indizes

Dieser 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)

Bedeutet im Wesentlichen:

  1. Verwendung des Designation_place_name-Index
  2. Suchen Sie Zeilen, die der Indexbedingungsbeziehung ='Manager' entsprechen
  3. Nur Zeilen behalten, die den timeOfJoining-Kriterien entsprechen

In Schritt 2 wird auf Festplattenseiten "zufällig" statt sequentiell zugegriffen, d. h. der Index enthält die Adresse übereinstimmender Zeilen auf der Festplatte, und Postgres besucht diese Adressen in der durch den Index angegebenen Reihenfolge. (Dies kann übrigens kostspielig sein. Manchmal entscheidet der Planer, dass es billiger ist, einfach die gesamte Tabelle zu lesen (Seq-Scan) oder alle Zeilen auf einer Seite stapelweise abzurufen, während die durch den Index angegebene Reihenfolge ignoriert wird (Bitmap-Index-Scan).)

Hinweis:Es gibt keine (Tabellen-)Joins in dieser Abfrage. Wenn es eine gegeben hätte, hätten Sie zusätzliche Einrückungsebenen gesehen. Lesen Sie sie von der größten Einrückung bis zur geringsten Einrückung.