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

Hvorfor udfører PostgreSQL sekventiel scanning på indekseret kolonne?

Hvis SELECT returnerer mere end ca. 5-10 % af alle rækker i tabellen, er en sekventiel scanning meget hurtigere end en indeksscanning.

Dette skyldes, at en indeksscanning kræver flere IO-operationer for hver række (slå rækken op i indekset, og hent derefter rækken fra heapen). Mens en sekventiel scanning kun kræver en enkelt IO for hver række - eller endnu mindre, fordi en blok (side) på disken indeholder mere end én række, så mere end én række kan hentes med en enkelt IO-handling.

Forresten:dette gælder også for andre DBMS - nogle optimeringer som "kun indeksscanninger" taget til side (men for en SELECT * er det højst usandsynligt, at en sådan DBMS ville gå til en "kun indeksscanning")



  1. Skal jeg virkelig bruge SET XACT_ABORT ON?

  2. Udtales det "S-Q-L" eller "Sequel"?

  3. Hvordan opdeler jeg output fra mysqldump i mindre filer?

  4. ORA-00257:arkiveringsfejl. Tilslut kun internt, indtil det frigøres.