我有以下查询(postgresql):
select prt.a,
(SELECT count(ind.b) FROM ind WHERE ind.indexed_field_1 @@ to_tsquery(prt.a)
AND lower(ind.t) not in ('a', 'b', 'c')) cnt
from p as prt
order by cnt desc
limit 200;
ind.indexed_field_1
使用GIN索引编制索引。到目前为止一直很好 - 大约持续约1秒(ind有~600K行)。
一旦我将indexed_field_2
添加到ind
表,并使用GIN索引对其进行索引 - 原始查询突然运行约5秒,同样适用于{{1}的类似查询}:
indexed_field_2
任何可能导致这种情况的线索?
执行计划看起来一样。
修改:
第二次查询的执行计划:
select prt.a,
(SELECT count(ind.b) FROM ind WHERE ind.indexed_field_2 @@ to_tsquery(prt.a)
AND lower(ind.t) not in ('a', 'b', 'c')) cnt
from p as prt
order by cnt desc
limit 200;
答案 0 :(得分:0)
新索引可以更改优化程序的估计值和所选的执行计划,新计划可能(偶然)比旧计划更差。
对于两个查询,如果没有EXPLAIN (ANALYZE, BUFFERS)
输出就可以说。