指定表的模式名称会影响性能吗?

时间:2013-07-02 15:56:43

标签: postgresql identifier database-optimization search-path

免责声明:出于好奇,这不是为了优化。

我想知道是否:

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 个答案:

答案 0 :(得分:2)

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

设置search_path确实会对安全性和便利性产生影响。这通常是一个好主意 例如,请考虑"Writing SECURITY DEFINER Functions Safely"手册中的建议。

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

答案 1 :(得分:0)

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

IF 我猜,系统有一个可衡量的差异

  • 一个search_path,包含很多架构条目(几百个)和/或
  • 极端数量的关系(关系目录不适合正常工作负载的内存)。

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