支援版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

60.1. 將查詢處理視為複雜的優化問題 #

在所有關聯運算子中,最難處理和優化的是join(聯結)。可能的查詢計畫數量隨著查詢中聯結的數量呈指數增長。進一步的優化工作是由於支援各種聯結方法(例如,PostgreSQL 中的巢狀迴圈、雜湊聯結、合併聯結)來處理個別聯結,以及各種索引(例如,PostgreSQL 中的 B 樹、雜湊、GiST 和 GIN)作為關係的存取路徑。

一般的 PostgreSQL 查詢優化器在替代策略的空間中執行近乎詳盡的搜索。這種演算法最初在 IBM 的 System R 資料庫中引入,可產生近乎最佳的聯結順序,但當查詢中的聯結數量變大時,可能會花費大量的時間和記憶體空間。這使得普通的 PostgreSQL 查詢優化器不適用於聯結大量表格的查詢。

德國弗賴貝格礦業技術大學的自動控制研究所,在想要使用 PostgreSQL 作為維護電力網的決策支援知識庫系統的後端時,遇到了一些問題。DBMS 需要處理用於基於知識系統的推理機的大型聯結查詢。這些查詢中的聯結數量使得使用普通的查詢優化器變得不可行。

在下文中,我們描述了一種遺傳演算法的實現,以一種對於涉及大量聯結的查詢有效的方式來解決聯結排序問題。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表格報告文件問題。