2017-09-12 55 views
0

如何在DBMS(在我的情況的Postgres)處理與執行計劃和準備好的聲明。如何獲得一份聲明中工作的執行計劃?

查詢的參數可以對執行計劃主要是由於數據統計了巨大的衝擊。

它可能在某些情況下更喜歡使用一個索引數據是否良好地分佈,但對於特定的值比較喜歡按順序進行掃描,因爲該參數不判別(通常當所述參數匹配表中的行的> 10%)

如果準備發言,我想總是以提高性能,或者如果一個很好的方式,它更多的是一種「盡力而爲」

提前感謝的

編輯:我擔心的是運行經常在同一查詢,但與其他參數這可能需要改變執行計劃。這是非常難以測量準備語句的性能增益VS總是有最準確的執行計劃

回答

1

已準備語句是使同一簡單的查詢遍地跑快的好方法。舉例來說,像

insert into table values ($1,$2,$3); 

OTOH它是不是讓大丑複雜的報告查詢運行速度快,其中在where子句中有什麼數據集可以基於改變的好方法。

準備查詢的整點是遍地保存查詢規劃的比較昂貴的一步。對於上面列出的簡單插入,運行1000次,計劃成本加起來。

OTOH一個大的複雜的報告查詢,計劃時間是無關緊要的。大多數大型報告查詢等都需要幾分鐘甚至幾小時才能運行。計劃時間以毫秒爲單位,在這裏不值得擔心。