理解執行計劃

文章摘自: http://pgguide.lxneng.com/performance/explain.html


什麼執行計劃?

Postgres 有一個強大的功能可以想你展示數據庫內容怎樣執行一個查詢. 這裏所謂的 執行計劃 是 通過 explain 展示出來的, 瞭解這個將讓你知道怎樣通過索引來優化數據庫的性能, 對於大多數 人來說困難難點就是讀懂這些輸出, 雖然大部分開發者瞭解其中的一些關鍵點.

關於解釋 (Explain)

每一個查詢執行的時候都有一個執行計劃, 有三種形式通過 explain 來輸出這些信息:

  • 常規形式 (只顯示可能發生了什麼)
  • Analyze (分析實際查詢中會發生什麼)
  • Verbose (顯示完整的內部執行計劃樹, 適用與高級用戶)

大多數情況下, explain 是用來分析 SELECT 語句, 但是你可以用在:

  • INSERT
  • UPDATE
  • DELETE
  • EXECUTE
  • DECLARE

使用Explain

例如這個查詢:

SELECT last_name FROM employees where salary >= 50000;

我們可以查看Postgres將要怎麼執行:

EXPLAIN SELECT last_name FROM employees where salary >= 50000;
                          QUERY PLAN
--------------------------------------------------------------
 Seq Scan on employees  (cost=0.00..16.50 rows=173 width=118)
   Filter: (salary >= 50000)

我們同時可以查看執行路徑和執行時間:

EXPLAIN ANALYZE SELECT last_name FROM employees where salary >= 50000;
                                            QUERY PLAN
--------------------------------------------------------------------------------------------------------
 Seq Scan on employees  (cost=0.00..16.50 rows=173 width=118) (actual time=0.018..0.018 rows=0 loops=1)
   Filter: (salary >= 50000)
 Total runtime: 0.053 ms

理解執行計劃

也許執行計劃最難的就是理解它們的意思. 首先這是一個簡短的描述, 不是一個完整的參考, 但是我們把它作爲理解查詢和優化數據庫的出發點.

如果你在有200萬行數據的數據表上執行 EXPLAIN ANALYZE 分析, 那麼你將看到如下輸出:

http://cl.ly/1f3o2w3x1a41402B2g1R/1.%20psql-1.png

但是我們來看一下到底是什麼意思

http://f.cl.ly/items/2F1A2T0a3h1v1d2u213O/1.%20psql-2.png

這裏有兩組數值, 通常你所查看出現的序列掃描, 但是更重要的是上面這三個數值是什麼意思, 啓動花了多少時間、最長時間和返回的行數. 在這種情況下, 因爲我們跑的是解釋分析(EXPLAIN ANALYZE), 我們不僅要看第一組的估算數值,但是時間運行的數值在第二組.

http://cl.ly/3i1x2D3R3w3D1I0R1h3W/1.%20psql-4.png

在這裏我們看到在序列掃描上花了很多的時間, 因此我們可以添加索引來試試看:

CREATE INDEX idx_emps on employees (salary);

通過這樣做我們的查詢時間從295毫秒減少到了1.7毫秒




發佈了125 篇原創文章 · 獲贊 18 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章