在所有關係運算符中,最難處理和最佳化的是連線。可能的查詢計劃的數量隨著查詢中連線的數量呈指數級增長。由於支援多種連線方法(例如,PostgreSQL中的巢狀迴圈、雜湊連線、合併連線)來處理單個連線,以及多種索引(例如,PostgreSQL中的B-tree、雜湊、GiST和GIN)作為關係的訪問路徑,進一步增加了最佳化的難度。
標準的PostgreSQL查詢最佳化器會在備選策略的空間中執行近乎窮盡的搜尋。該演算法最初在IBM的System R資料庫中引入,可以產生近乎最優的連線順序,但當查詢中的連線數量增加時,可能會花費大量的時間和記憶體空間。這使得標準的PostgreSQL查詢最佳化器不適用於連線大量表的查詢。
德國弗萊貝格礦業技術大學的自動控制研究所發現,當他們希望使用PostgreSQL作為支援電力網維護的決策支援知識庫系統的後端時,遇到了一些問題。該資料庫系統需要為知識庫系統的推理機處理大型連線查詢。這些查詢中的連線數量之多使得使用標準查詢最佳化器變得不可行。
在下文中,我們將描述一種遺傳演算法的實現,用於解決連線排序問題,這種方法對於涉及大量連線的查詢非常有效。
如果您在文件中發現任何不正確之處、與您實際體驗不符的內容或需要進一步澄清的地方,請使用此表格報告文件問題。