我有一個表/ 450萬行。沒有主鍵。該表有一列p_id
,類型爲整數。本欄使用btree
方法有一個索引idx_mytable_p_id
。我做的:瞭解postgres解釋瓦特/位圖堆/索引掃描
SELECT * FROM mytable WHERE p_id = 123456;
我運行這樣的一個解釋,看到下面的輸出:
Bitmap Heap Scan on mytable (cost=12.04..1632.35 rows=425 width=321)
Recheck Cond: (p_id = 543094)
-> Bitmap Index Scan on idx_mytable_p_id (cost=0.00..11.93 rows=425 width=0)
Index Cond: (p_id = 543094)
問題:
- 這是爲什麼查詢做了一堆掃描,然後一個位圖索引掃描?
- 爲什麼檢查425行?爲什麼操作321的寬度?
- 12.04..1632.35和0.00..11.93告訴我的費用是多少?
記錄中有773行,其中p_id
的值爲123456.在mytable
上有38列。
謝謝!
內部操作的總成本將始終包含在外部操作的啓動成本中。 – vyegorov 2012-04-13 20:08:43
@vyegorov是正確的,對於來自EXPLAIN ANALYZE的**實際**數據,您應該明白節點所花費的總時間除以** loops **以顯示每次迭代的時間。正如您所期望的那樣,這是包含在封閉節點中的節點的總時間。 – kgrittn 2012-04-13 20:24:45