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