sql >> Database >  >> RDS >> PostgreSQL

Queryplan van postgres met indexen

Dit abonnement:

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)

In feite betekent:

  1. De Indexation_place_name gebruiken
  2. Zoek rijen die passen bij de indexvoorwaarderelatie ='Manager'
  3. Behoud alleen rijen die voldoen aan de timeOfJoining-criteria

Tijdens stap 2 worden schijfpagina's "willekeurig" geopend in plaats van sequentieel, dat wil zeggen dat de index het adres van overeenkomende rijen op schijf bevat, en Postgres bezoekt deze adressen in de volgorde die door de index wordt aangegeven. (Dit kan trouwens kostbaar zijn. Soms besluit de planner dat het goedkoper is om gewoon de hele tabel te lezen (seq-scan) of batchgewijs alle rijen op een pagina op te halen, terwijl de volgorde wordt genegeerd die wordt aangegeven door de index (bitmap-indexscan).)

Let op:er zitten geen (tabel)joins in die query. Als er een was geweest, had je extra inspringniveaus gezien. Lees ze van meest ingesprongen naar minst ingesprongen.



  1. array of lijst in Oracle met behulp van cfprocparam

  2. C# Remote MySQL - Toegang geweigerd voor gebruiker

  3. standaard voor kolom xxxx kan niet automatisch worden gecast om boolean te typen in Postgres DB

  4. Geef tabel door als parameter in sql-server UDF