同一个表上的两个GIN索引会导致性能下降吗?

时间:2017-11-26 15:25:41

标签: postgresql indexing full-text-search

我有以下查询(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;

1 个答案:

答案 0 :(得分:0)

新索引可以更改优化程序的估计值和所选的执行计划,新计划可能(偶然)比旧计划更差。

对于两个查询,如果没有EXPLAIN (ANALYZE, BUFFERS)输出就可以说。