您好,登錄后才能下訂單哦!
本篇文章為大家展示了PostgreSql 復雜的查詢該怎么分析 ,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
永久了MYSQL 可能會忘記什么是復雜的查詢,每種數據庫有自己的特點,POSTGRESQL 是一個 OLAP + OLTP 兼得的數據庫,所以postgresql 會面對復雜的查詢,而復雜的查詢怎么來看,分析這就是面臨的問題。
我們以下面的例子來看看怎么分析
with data_s as (
select cj.customer_id,cij.city_id,sum(pj.amount) as all_amount
from customer as cj
inner join payment as pj on pj.customer_id = cj.customer_id
inner join address as aj on aj.address_id = cj.address_id
inner join city as cij on cij.city_id = aj.city_id
group by cj.customer_id,pj.amount,cij.city_id
limit 50)
select cus.first_name || ' ' || cus.last_name as full_name,cw.all_amount
from customer as cus
inner join data_s as cw on cw.customer_id = cus.customer_id
與大部分數據庫一致的查閱執行計劃的方式,我們從縮進最里面的開始
首先
seq scan on public.customer.cj 說明是要全表掃描這個表,啟動成本是 0 cost-0.00 這個節點的成本是14.99 評估出需要掃描的夯實 599行,行的列數是6 ,實際上執行總,啟動成本是0.021 節點的成本是10.931
其實POSTGRESQL 展示的執行計劃以及成本是很詳細和好看的,但隨著語句的復雜度,則展現的整體執行計劃看上去就沒有那么方便了。這就是今天要說的,怎么嫩更方便的看。
實際上 PG 官方的pgadmin,可以很好的將要執行的語句變成圖形化的方式來展示執行的計劃,看到下面的圖,用SQL SERVER 的小伙伴可能會比較熟悉,雖然么有SQL SERVER 的圖形化 SSMS 的功能多,但分析來說已經很不錯了。配合非界面化的文字來協同分析,可以達到比較好的結果。
當然這樣看估計還是有很多人不會太滿意,那下面在看看這樣的方式能否幫助你
可以想象,看到上面的圖,有人已經覺得有點意思,想繼續了解一下。首先上面的圖是將你的執行計劃,上傳到某個網站得到的效果。
他可以將你的執行結合變為更適合的分析的方式,展示,并且會給你一個匯總,尤其當得到一個幾十行,甚至上百行的執行計劃的時候,這樣的匯總和展示的方式,可能會讓焦躁的你,稍微的冷卻一下。
下面匯總的圖,可以讓我們大致迅速了解我們的表有幾個seq scan 時間是多少,掃描了表的百分之多少。我想如果這個結果還不能讓你滿意的話...
那就的祭出最終的神器,可以看到上面的頁面,通過這個頁面可以將整體預計執行的順序,以及其中那段是哪個預計行程的,給你一個直觀的反映。
有了以上的工具,其實可以應付大多數的比較困難的復雜的語句。
下面是這兩個能將explain的執行計劃進行詳細解釋的網站。
https://explain.depesz.com/
http://tatiyants.com/pev/#/plans/new
其中第二個網站,需要將explain 輸出為 Json的格式,配合語句,進行展示及具體如何獲得 json 的方式的。
1 通過 explain (format josn)的方式來獲得 JSON 的執行計劃
2 通過psql -qAtd 數據庫 -f 執行語句 > 文件的方式來獲得 json 執行計劃的輸出文件
上述內容就是PostgreSql 復雜的查詢該怎么分析 ,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。