我有一个安静的简单查询:
SELECT
contract.ctrId,
contract.ctrNr
FROM
changeLog,
contract
where
changelog.entid in (select contract.ctrid from contract where contract.ctrnr LIKE '1000002%');
此查询需要800毫秒。
如果我将带有内部select子句的查询更改为select的结果(这是一个单独的数字)
SELECT
contract.ctrId,
contract.ctrNr
FROM
changeLog,
contract
where
changelog.entid in (100000001611624);
此查询仅需16 ms。
单独执行内部选择需要4 ms。
Chnagelog.entid有一个索引。 Contract.ctris是主键。合同表只有2行,更改日志表有大约4万行。
我仍然无法理解这一点。内部人选择的问题是什么?
答案 0 :(得分:0)
很抱歉没有提供足够的详细信息,我会更精确,并且下次会按照标记说明进行操作。
更改日志和合同的加入对性能没有太大影响。
这里的问题是changelog是一个VIEW。它是changelogActive和changelogPendig表的联合。 Postgres需要在每个选择中加入视图中的两个表。
谢谢大家的提示,你帮了很多忙!