Assembling row sets
To understand how to optimize the way a query runs, you have to first understand the options for how it can be executed. Now that you're armed with some basics on how nodes fit together and costs are computed, the next stage to understanding how queries work is to see the options for bottom-level plan nodes that are usually selecting rows.
Tuple ID
Each row in the database has a tuple ID, a number visible as the system column named ctid
in each row. You can use these to look up a row:
SELECT ctid,customerid FROM customers limit 3; ctid | customerid -------+------------(0,1) | 1(0,2) | 2(0,3) | 3EXPLAIN SELECT customerid FROM customers WHERE ctid='(0,1)'; QUERY PLAN --------------------------------------------------------- Tid Scan on customers (cost=0.00..4.01 rows=1 width=4) TID Cond: (ctid = '(0,1)'::tid)
These TID
sequences cannot be relied upon as a stable way to access a particular row outside...