sql >> Databáze >  >> RDS >> PostgreSQL

Proč PostgreSQL provádí sekvenční skenování na indexovaném sloupci?

Pokud SELECT vrátí více než přibližně 5-10 % všech řádků v tabulce, je sekvenční prohledávání mnohem rychlejší než indexové prohledávání.

Důvodem je, že prohledávání indexu vyžaduje několik IO operace pro každý řádek (vyhledejte řádek v indexu a poté načtěte řádek z haldy). Zatímco sekvenční skenování vyžaduje pouze jeden IO pro každý řádek - nebo ještě méně, protože blok (stránka) na disku obsahuje více než jeden řádek, takže lze načíst více než jeden řádek jedinou operací IO.

Btw:to platí i pro ostatní DBMS – některé optimalizace jako „skenování pouze indexu“ jdou stranou (ale pro SELECT * je vysoce nepravděpodobné, že by takový DBMS šel na „skenování pouze indexu“)



  1. Jak vyřešit nejednoznačné názvy sloupců při načítání výsledků?

  2. Získejte poslední vložené ID řádku (s příkazem SQL)

  3. Jak funguje OBJECTPROPERTY() na serveru SQL Server

  4. Jak získat zeměpisnou šířku a délku z sdo_geometry v oracle