2013-07-02 50 views
1

聲明:這不是爲了優化,而是出於好奇。是否爲表指定模式名稱會影響性能?

我想知道如果這樣的:

SET search_path TO myscheme; -- obviously this is done once per connection 
SELECT foo, bar FROM table1 WHERE [..clauses..] 

是有點快/慢

SELECT foo, bar FROM myscheme.table1 WHERE [..clauses..] 

,或者有一些其他影響,可能暗示指定模式(或沒有),在每一個查詢。

我已經做了一些(非常少的)測試,並且在速度方面我看不到任何差異。

回答

2

第二個是更快,但勉強。 SET非常便宜。
通常情況下,符合模式限定的表名可能會稍快一些,因爲對系統目錄的查詢可能更具體。但是你無法衡量這一點。這只是無關緊要,性能明智。

雖然設置search_path確實對安全性和便利性有影響。這通常是一個好主意。
例如,請考慮"Writing SECURITY DEFINER Functions Safely"手冊中的建議。

您是否知道有many ways to set the search_path

+0

感謝您的支持!我不知道有可能爲每個角色設置一個search_path,這是非常有用的! – Strae

0

出於所有實際目的,這應該會產生任何可衡量的差異。

IF有一個可測量的差異,我猜想,該系統具有

  • 一個search_path有非常多的模式條目(幾百)和/或
  • 關係的一個極端的數量(很多以至於關係目錄不適合正常工作負載的內存)。

在這種情況下,您有肯定其他問題比限定您的模式名稱。