When a database sees a query, it translates it into a logical plan. This plan is a Directed Acyclic Graph of these operations described below. When you ask Postgres to *EXPLAIN* a query, you can use this to better understand each query # Table Operations ## ![[SeqScan]] ## ![[TableFuncScan]] # Index Operations ## ![[BitmapAndBitmapOr]] ## ![[BitmapIndexScan]] ## ![[IndexOnlyScan]] ## ![[IndexScan]] # Page Operations ## ![[BitmapHeapScan]] # Result Set Operations ## ![[Aggregate]] ## ![[Append]] ## ![[GatherMerge]] ## ![[Hash]] ## ![[HashJoin]] ## ![[Limit]] ## ![[Materialize]] ## ![[MergeAppend]] ## ![[MergeJoin]] ## ![[NestedLoop]] ## ![[ProjectSet]] ## ![[RecursiveUnion]] ## ![[SetOp]] ## ![[Sort]] ## ![[Unique]] # Concurrent/Distributed Result Set Operations ## ![[Broadcast]] ## ![[Redistribute]] ## ![[Gather]] # Tuple Operations ## ![[LockRows]] ## ![[ModifyTable]] ## ![[Result]] ## ![[SampleScan]] ## ![[TidScan]] # Other Result Set Operations ## ![[CTEScan]] ## ![[CustomScanForeignScan]] ## ![[FunctionScan]] ## ![[SubqueryScan]] ## ![[ValuesScan]]