| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 46. 基因查詢優化 | Fast Forward | Next |
GEQO 模塊是試圖解決類似漫遊推銷員問題(TSP)的查詢優化問題的。 可能的查詢規劃被當作整數字串進行編碼。每個字串代資料表查詢裡面一個關係到下一個關係的 連接的順序。 例如,下面的連接樹
/\ /\ 2 /\ 3 4 1
是用整數字串 '4-1-3-2' 編碼的, 這就是說,首先連線關係 '4' 和 '1',然後 '3',然後是 '2', 這裡的 1,2,3,4都是 PostgreSQL 優化器裡的關係標識(ID)。
GEQO 模塊的一部分是採用的 D. Whitley 的 Genitor 算法。
在 PostgreSQL 裡的 GEQO 實現的一些特性是:
使用 穩定狀態(steady state)的 GA (替換全體中最小健康度的個體,而不是整代的替換)允許向改進了的查詢規劃快速逼近。 這一點對在合理時間內處理查詢是非常重要的;
邊緣重組交叉(edge recombination crossover)的使用特別適於在用 GA解決 TSP 問題時保持邊緣損失最低。
譯注: TSP 是旅行推銷員問題的意思
否決了把突變(Mutation)作為基因操作符的做法,這樣生成合法的 TSP 漫遊時不需要修復機制。
GEQO 模塊讓 PostgreSQL 查詢優化器可以透過非窮舉搜索有效地支援大的連接查詢。
我們還需要一些工作來改進基因算法的參數設置。 在文件 backend/optimizer/geqo/geqo_params.c 裡的過程 gimme_pool_size 和 gimme_number_generations, 我們在設置參數時不得不為兩個競爭需求做出折衷:
查詢規劃的優化
計算處理時間
在最基本的層面上,我們並不清楚用給 TSP 涉及的 GA 算法解決查詢優化的問題是否合適。 在 TSP 的情況下,與任何子字串(部分旅遊)相關的開銷都是獨立於旅遊的其他部分的, 但是目前,這一點對於查詢優化是不同的。因此,我們可以懷疑邊緣重組交叉是否最有效的突變過程。