1. 程式人生 > >資料庫查詢優化引擎可以怎樣實現查詢優化---開篇

資料庫查詢優化引擎可以怎樣實現查詢優化---開篇

前言

資料庫的優化體現在各個優化引擎上,一個數據庫能否流行起來,也是取決於資料庫本身的優化引擎的優劣。而優化也是分幾個階段,比如,第一個階段是需求分析,這時候就是對資料庫的選型,系統的選型做,應用的策略做判斷,第二個階段是基於選好優化器的基礎上進行資料模型的設計,這個階段會產生需求體現的表,欄位,以及程式碼裡面對映到的POJO,第三個階段是開發過程中SQL指令碼的優化處理,這裡只是基於語法層面的優化,比如找到替代的效能更好的語法來替代現有的指令碼,第四個階段是壓測階段以及灰度測試的階段優化,這個階段通常會藉助一些系統的分析工具,檢視資料庫設計的效能,比如Jprofile,分析虛擬機器的執行的效率,消耗等等,第五個階段,這時候就是上線的階段測試,主要是通過日常的日誌來分析,執行的消耗,以及判斷系統是否需要擴充套件效能來支援使用者的訪問增長。

查詢重用優化

這裡的重用優化,體現在我們的JPA框架的快取提供的支援,如果JPA的快取不支援,就體現在資料庫引擎的優化支援,通常這裡是在分散式場景下,對資料有強一致性的要求的業務都不會使用這樣優化策略,畢竟這裡會出現大量的髒讀的情況,比如,我們使用非常流行的mybatis的一級快取一級二級快取,就是針對減少資料庫訪問壓力的提供的支援,具體可以檢視之前寫的關於mybatis的快取的文章。而這裡的資料庫的重用優化就體現在提供一個快取塊來提供外界的訪問。

查詢重寫優化

不是本節的重點內容,這裡的優化的層面就更加的豐富,就簡單的從實際應用最多的層面來說就是語法層面的等價替換提高查詢效能。如果讀者有興趣瞭解其他層面的優化,建議從電子檔的8頁瞭解介紹。

查詢演算法優化

簡單的介紹演算法的類別,後續會詳細的介紹到各個演算法的應用層面,這裡先做個簡單的鋪墊,常用的優化演算法就是遺傳演算法,動態規劃演算法,這兩種演算法是PG底層使用到的最常用的演算法,遺傳演算法大致意思是通過優勝劣汰的自然規律的引用含義,從最後優勝的查詢優化的結果中獲取最優的結果。而動態規劃演算法是把問題分割層N個不同層面的問題,然後從這N個問題集裡面選出最好的最優的解,然後拋棄其他的解,最後歸集到最後一個子問題,就是動態規劃最後所需的解。除了這兩種演算法還有其他的演算法,比如貪心演算法等,這種演算法的含義是從區域性最優的解中選出作為結果提供給其他引用。

查詢並行優化

不是本節重點內容,後續會詳細的介紹,大致應用場景是分散式系統裡面,如果出現多個微服務的相互依賴消費的情況,這時候的優化效能就是各個服務之間的 通訊耗時,以及區域性的優化。區域性優化又分為IO優化以及CPU優化。