《3-陳線-PostgreSQL查詢優化深度探索.pdf》由會員分享,可在線閱讀,更多相關《3-陳線-PostgreSQL查詢優化深度探索.pdf(25頁珍藏版)》請在三個皮匠報告上搜索。
1、PostgreSQL查詢優化深度探索陳線陳線柯普瑞企業柯普瑞企業ITIT學院學院PostgreSQLPostgreSQL授權講師授權講師資深資深數據庫數據庫講師講師PostgreSQL查詢優化器概述01.PostgreSQL數據庫是世界上最先進的開源關系數據庫系統,查詢優化器是數據庫重要的核心模塊之一查詢優化的常規方法02.PREPARE預備、EXPLAIN執行計劃、INDEX索引、PARTITION分區、VIEW視圖、MV物化視圖等等查詢優化的深度探索03.查詢樹、邏輯重寫、邏輯分解、統計信息與選擇率、掃描路徑、動態規劃&遺傳算法、連接路徑等等主要內容:01 PostgreSQL查詢優化器概
2、述3PostgreSQL數據庫系統查詢優化模塊詞法分析語法分析語義分析其它模塊事務處理并發控制故障恢復規則成本語法分析模塊查詢執行模塊數據存取模塊01-1 語法分析模塊4源碼文件位置:src/backend/parser一詞法分析:scan.l二語法分析:gram.y三語義分析:parse_*.c01-2 查詢優化模塊5源碼文件位置:src/backend/optimizer一基于規則的優化RBO:Rule-Based Optimizer邏輯優化二基于代價的優化CBO:Cost-Based Optimizer物理優化01-3 查詢執行模塊6源碼文件位置:src/backend/executor
3、01-4 數據存取模塊7源碼文件位置:src/backend/access01-5 其他模塊8一事務處理二并發控制三故障恢復源碼文件位置:src/backend/access/transamsrc/backedn/storage/lmgr02 查詢優化的常規方法9 查詢優化的目標通過調整SQL語句或設計索引,提高查詢性能、減少響應時間,以期系統更高效地運行。常規查詢優化有下列主要技術:一使用EXPLAIN命令:在執行查詢之前,先使用EXPLAIN關鍵字加上要執行的查詢語句,這樣會返回查詢計劃信息。根據該信息可以判斷查詢是否需要重寫或者添加索引等操作。二創建合適的索引(index):對于經常被查
4、詢的列,應該為其創建索引。索引可以大大提高查詢速度,特別是當表中數據量非常大時。三分區表(Partitioning):將大型表按照某個條件進行水平切分成更小的子表,每個子表都有自己的存儲空間。這樣可以提高查詢效率并減少不必要的IO開銷。四視圖(View):如果有復雜的查詢邏輯,可以將其定義為視圖,然后直接從視圖中獲取結果。這樣可以避免重復編寫相同的查詢邏輯。五統計信息收集與更新:PostgreSQL內置了統計信息收集器,可以收集表、索引和系統狀態的統計信息。及時更新這些統計信息可以確保查詢優化器選擇最佳的執行路徑。六配置參數調優:通過修改PostgreSQL的配置文件postgresql.co
5、nf,可以調整一些影響查詢性能的參數值,比如shared_buffers、work_mem等。七使用物理外部表(External Table):如果需要處理大量的數據,而無法完全放入內存中,可以使用物理外部表來連接到外部數據源,利用外部數據庫的功能來處理數據。02-1 EXPLAIN1002-2 創建索引1102-3分區表(Partitioning)1202-4視圖(View)和物化視圖MV1302-5統計信息收集與更新1402-6 配置參數調優1502-7使用物理外部表(External Table)1603 PostgreSQL查詢優化深度探索17源碼中優化器的5個基本目錄:plan:總入
6、口,調用邏輯優化與物理優化prep:邏輯優化path:路徑物理優化geqo:遺傳算法物理優化(表連接超過11)util:輔助工具模塊,公共函數,供所有目錄使用。03-1 目錄結構圖18Plan 模塊為總調用模塊,Prep 和 Path 被它調用。在執行中,從Plan模塊入口,先調用 Prep 模塊進行預處理,再調用Path模塊進行優化。Path模塊中有開關,指示是 否啟用遺傳算法進行優化,如果啟用,且連接的表超過 ll,就調用 geqo 目錄中的遺傳算法進行優化。util 模塊為輔助工具模塊,提供其他模塊使用的工具函數。03-2 目錄結構圖:prep19prep 目錄主要處理邏輯優化中的邏輯重
7、寫的部分,對投影、選擇條件、集合操作、連接操作都進行了重寫03-2 目錄結構圖:path20path 目錄主要生成物理路徑的部分,包括生成掃描路徑、連接路徑等03-3 目錄結構圖:geqo21geqo 目錄主要是實現了一種物理路徑的搜索算法遺傳算法,通過這種算法可以處理參與連接的表比較多的情況。相較于多表連接的窮舉而言,geqo遺傳算法,提供了更好的性能03-3 目錄結構圖:utils22utils 目錄則提供了大量的公共函數,其他各個目錄中均可能會調用這些函數。03-4 深度探索23PostgreSQL查詢優化,可以從以下方面進一步深入:一查詢樹二邏輯重寫優化三邏輯分解優化四統計信息和選擇率
8、五掃描路徑六動態規劃和遺傳算法七連接路徑PostgreSQL查詢優化器概述01.PostgreSQL數據庫是世界上最先進的開源關系數據庫系統,查詢優化器是數據庫重要的核心模塊之一查詢優化的常規方法02.PREPARE預備、EXPLAIN執行計劃、INDEX索引、PARTITION分區、VIEW視圖、MV物化視圖等等查詢優化的深度探索03.查詢樹、邏輯重寫、邏輯分解、統計信息與選擇率、掃描路徑、動態規劃&遺傳算法、連接路徑等等主題回顧:THANKSTHANKSPG授權培訓中心南京柯普瑞信息技術有限公司公司地址:南京市秦淮區中山東路300號長發中心A棟23樓聯系電話:025-87787966 13913038154聯 系 人:程老師網址:www.china-掃一掃有驚喜