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..]

或者是否有其他一些暗示可能建议在每个查询中指定(或不指定)模式。

我做了一些(很少)测试,我看不出在速度方面有什么不同。

4

2 回答 2

2

第二个更快,但几乎没有。SET非常便宜。
通常,模式限定的表名可能会稍微快一些,因为对系统目录的查询可能更具体。但你将无法衡量这一点。这只是无关紧要的,性能方面的。

但是,设置search_path确实会影响安全性和便利性。这通常是一个好主意。
例如,考虑手册中关于“安全地编写SECURITY DEFINER函数”的建议。

你知道有很多方法可以设置search_path吗?

于 2013-07-02T16:24:01.937 回答
0

出于所有实际目的,这应该会产生任何可衡量的差异。

如果有一个可测量的差异,我猜,系统有

  • asearch_path具有非常多的模式条目(数百个)和/或
  • 极端数量的关系(如此之多以至于关系目录不适合正常工作负载的内存)。

在这种情况下,除了限定模式名称之外,您肯定还有其他问题。

于 2013-07-02T16:24:33.143 回答