sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför utför PostgreSQL sekventiell skanning på indexerad kolumn?

Om SELECT returnerar mer än cirka 5-10 % av alla rader i tabellen är en sekventiell genomsökning mycket snabbare än en indexskanning.

Detta beror på att en indexsökning kräver flera IO-operationer för varje rad (slå upp raden i indexet och hämta sedan raden från högen). Medan en sekventiell skanning bara kräver en enda IO för varje rad - eller ännu mindre eftersom ett block (sida) på disken innehåller mer än en rad, så mer än en rad kan hämtas med en enda IO-operation.

Btw:detta är sant för andra DBMS också - vissa optimeringar som "endast indexsökningar" tas åt sidan (men för en SELECT * är det högst osannolikt att ett sådant DBMS skulle gå för en "endast indexsökning")



  1. Returnera en lista över alla serverutlösare i SQL Server

  2. Förmildrande indexfragmentering

  3. Hur man kommenterar i SQL

  4. Hur kan jag generera (eller få) ett ddl-skript på en befintlig tabell i Oracle? Jag måste återskapa dem i Hive