小编Yur*_*kiy的帖子

PostgreSQL 9.6 中不受欢迎的 Nest Loop vs. Hash Join

我在 PostgreSQL 9.6 查询计划方面遇到了麻烦。我的查询如下所示:

SET role plain_user;

SELECT properties.*
FROM properties
JOIN entries_properties
  ON properties.id = entries_properties.property_id
JOIN structures
  ON structures.id = entries_properties.entry_id 
WHERE structures."STRUKTURBERICHT" != ''
  AND properties."COMPOSITION" LIKE 'Mo%'
  AND (
    properties."NAME" LIKE '%VASP-ase-preopt%'
    OR properties."CALCULATOR_ID" IN (7,22,25)
  )
AND properties."TYPE_ID" IN (6)
Run Code Online (Sandbox Code Playgroud)

我为上面使用的表启用了行级安全性。

VACUUM ANALYZE在运行查询之前做过,但没有帮助。

我知道这不是一个好的做法set enable_nestloop = False,对于计划者来说,还有任何其他类似的选择。但是我怎样才能“说服”规划器在不禁用嵌套循环的情况下使用散列连接?

重写查询是一种选择。

如果我在绕过 RLS 的角色下运行相同的查询,那么它的执行速度非常快。行级安全策略如下所示:

CREATE POLICY properties_select …
Run Code Online (Sandbox Code Playgroud)

postgresql performance join row-level-security postgresql-9.6 query-performance

17
推荐指数
1
解决办法
9824
查看次数