簡體   English   中英

postgresql查詢執行時間不同

[英]Different in postgresql query execution timing

我發現在PostgreSQL上觸發時,下面給出的兩個查詢會生成不同的查詢執行時間:

查詢1:

\timing
select s0.value,s1.value,s2.value,s3.value,s4.value
from (
   select f0.subject as r0,f0.predicate as r1,f0.object as r2,f1.predicate as r3,f1.object as r4
   from schemaName.facts f0,schemaName.facts f1
   where f1.subject=f0.subject
) facts,schemaName.strings s0,schemaName.strings s1,schemaName.strings s2,schemaName.strings s3,schemaName.strings s4
where s0.id=facts.r0 and s1.id=facts.r1 and s2.id=facts.r2 and s3.id=facts.r3 and s4.id=facts.r4;

Query1被重寫:

select s0.value,s1.value,s2.value,s3.value,s4.value
from schemaName.strings s0,schemaName.strings s1,schemaName.strings s2,schemaName.strings, schemaName.facts f0,schemaName.facts f1 s3,schemaName.strings s4
where s0.id=f0.subject and s1.id=f0.predicate and s2.id=f0.object and s3.id=f1.predicate and s4.id=f1.object, f0.subject=f1.subject;

我無法理解postgresql生成不同查詢執行時間的原因。 有人可以幫我理解這個嗎?

Postgresql帶有一個非常好的命令:EXPLAIN和EXPLAIN ANALYZE。 前者打印出查詢計划,估計事情將花費多長時間,后者在實際運行查詢時輸出查詢計划,這允許它將實際執行成本與計划放在一起。

Postgresql使用一整套標准和啟發式方法來決定如何最好地運行查詢。 從順序和隨機訪問成本(在配置中可調)到表中數據的統計抽樣的所有內容。

我發現通常它會提出相同的查詢計划給出兩個完全不同的查詢(假設它們給出相同的結果),並且我已經看到查詢結構影響計划。 了解它正在做什么的最好方法是要求它解釋。

所有這些都說:第二次運行總是比第一次快,因為數據現在被緩存了。 因此,如果您真的想要比較運行時,請務必至少運行四次查詢,刪除第一個查詢,然后平均其余查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM