1
我注意到在執行常規查詢和創建數據庫視圖並查詢視圖時,查詢計劃存在很大差異。對數據庫視圖的過濾比直接查詢慢得多
情況1基本查詢:
SELECT <somequery> WHERE <some-filter> <some-group-by>
情況下2數據庫視圖:
CREATE VIEW myview AS SELECT <some-query> <some-group-by>;
SELECT FROM myview WHERE <some-filter>;
我注意到,在案件2個Postgres將加入/總千方百計,才把它應用過濾。在情況1中,它不會觸及用where子句過濾出的行。所以案例2慢得多。
在保持數據庫視圖的同時,是否有任何技巧可以解決這個問題?
在一般情況下,我不相信這一點(在PG中,視圖被視爲一個宏,並在選擇一個計劃之前與封閉查詢混合在一起)。你確定這些查詢在邏輯上是相同的嗎?你能否在你的問題中添加一個*具體*例子來顯示這種行爲?一個例外可能是geqo(這個查詢的範圍表有多大?) – joop