如果查询的实际结果会加入大量数据(例如,当searchterm
很短或频繁的城市名称时),那么限制带有限制的查询输出不会改善执行时间导致糟糕的表现:
但是,如果要加入的数据很少,执行时间显然很长:
现在,如果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;