带限制的PostgreSQL查询计划
如果查询的实际结果将加入大量数据(如带限制的PostgreSQL查询计划,sql,postgresql,postgresql-performance,sql-limit,Sql,Postgresql,Postgresql Performance,Sql Limit,如果查询的实际结果将加入大量数据(如searchterm较短或经常出现的城市名称,见下文),则使用limit限制该查询的输出不会提高执行时间,实际上会导致糟糕的性能: 但是,如果要连接的数据很小,则执行时间显然很长: 现在,如果Postgres事先知道输出最多包含25行,为什么会有如此糟糕的执行性能?如何重新编写查询 SELECT addritems.plz FROM addritems INNER JOIN adresse ON adresse.adrcd = addrit
searchterm
较短或经常出现的城市名称,见下文),则使用limit限制该查询的输出不会提高执行时间,实际上会导致糟糕的性能:
但是,如果要连接的数据很小,则执行时间显然很长:
现在,如果Postgres事先知道输出最多包含25行,为什么会有如此糟糕的执行性能?如何重新编写查询
SELECT addritems.plz
FROM addritems
INNER JOIN adresse ON adresse.adrcd = addritems.adrcd
INNER JOIN strasse ON adresse.skz = strasse.skz
AND adresse.gkz = strasse.gkz
INNER JOIN ortschaft ON adresse.okz = ortschaft.okz
AND adresse.gkz = ortschaft.gkz
INNER JOIN gemeinde ON adresse.gkz = gemeinde.gkz
WHERE search @@ to_tsquery(plainto_tsquery('german', 'searchterm')::text || ':*')limit 25;
听起来很奇怪,当您没有或没有正确的
顺序
子句时,拥有限制
子句会严重影响性能。阅读有关性能的问题,需要提供最少的基本信息。显然,你对博士后的理解是从一开始的。您甚至没有表限定搜索
,让我们看看这是从哪里来的。此外,我们更喜欢查询计划的文本而不是粘贴的图像。如果查询计划很大,请上传到explain.depesz.com。考虑标签中的指令。托马斯的答案可能与你有关,也可能与你无关。