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

Warum führt PostgreSQL einen sequenziellen Scan für indizierte Spalten durch?

Wenn das SELECT mehr als ungefähr 5-10 % aller Zeilen in der Tabelle zurückgibt, ist ein sequenzieller Scan viel schneller als ein Index-Scan.

Dies liegt daran, dass ein Index-Scan mehrere erfordert IO-Operationen für jede Zeile (Suchen Sie die Zeile im Index und rufen Sie dann die Zeile aus dem Heap ab). Während ein sequenzieller Scan nur einen einzigen IO für jede Zeile erfordert - oder sogar weniger, da ein Block (Seite) auf der Festplatte mehr als eine Zeile enthält, können also mehr als eine Zeile mit einer einzigen IO-Operation abgerufen werden.

Übrigens:Dies gilt auch für andere DBMS - einige Optimierungen wie "nur Index-Scans" beiseite gelassen (aber für ein SELECT * ist es höchst unwahrscheinlich, dass ein solches DBMS für einen "nur Index-Scan" gehen würde)