Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql %例如,当数据量增加时,搜索速度突然减慢_Postgresql - Fatal编程技术网

Postgresql %例如,当数据量增加时,搜索速度突然减慢

Postgresql %例如,当数据量增加时,搜索速度突然减慢,postgresql,Postgresql,我有一个从字符串列中搜索单词的SQL。 该列具有通过pg_trgm扩展实现中间匹配的索引 CREATE INDEX index ON "Texts" USING gist (body gist_trgm_ops); SELECT * FROM "Texts" WHERE body like '%hogehoge%'; 当满足以下条件时,文本搜索效果良好 Table size : 34 MB Index size : 722 MB -> Total runtime : 1.03 sec

我有一个从字符串列中搜索单词的SQL。 该列具有通过pg_trgm扩展实现中间匹配的索引

CREATE INDEX index ON "Texts" USING gist (body gist_trgm_ops);
SELECT * FROM "Texts" WHERE body like '%hogehoge%';
当满足以下条件时,文本搜索效果良好

Table size : 34 MB
Index size : 722 MB
-> Total runtime :  1.03 sec
但是,当我增加数据量时,响应速度明显减慢

Table size : 42 MB 
Index size : 1321 MB
-> Total runtime : 91.38 sec 
我更改了“shared_buffers”以跟上索引大小,但它没有更改响应时间。 有没有办法让反应更快

[服务器规格]
-操作系统:Windows Server 2012 R2
-内存大小:4GB
[postgresql.conf设置]
-有效缓存大小:3145383kB
-共享缓冲区:1228MB->2228MB
-工作记忆:6290kB
[版本]
PostgreSQL 9.2.4

[编辑]
解释分析的结果如下(表大小与上面不同,但响应时间也异常缓慢。)

正常:

较慢:

[edit2]
谢谢你的评论。我在下面试过,但都没成功

  • 设置统计数据(-1->10000)并进行分析
  • 将内存大小从4GB增加到8GB
我认为缓冲会导致响应速度的差异。 当我在服务器响应后重试搜索时,第二次响应速度快了100多倍。
当我重新启动服务器并执行相同的SQL时,响应再次减慢。

您能给我们看一下EXPLAIN ANALYZE at的结果吗?如果没有这些信息,几乎不可能为您提供帮助。运行
EXPLAIN ANALYZE SELECT*FROM“text”,其中的body类似于“%hogehoge%”您的统计信息已关闭。运行
分析“文本”
并查看这是否会改变任何内容。除了带有\u no \u name响应的\u horse\u之外,您可能还必须更改统计信息的设置:ALTER TABLE“Texts”ALTER body SET statistics integer;您必须检查哪个整数值最适合您的情况
Bitmap Heap Scan on "Texts"  (cost=31.01..69.08 rows=10 width=139) (actual time=1515.342..1568.444 rows=999 loops=1)"
  Recheck Cond: ((text_body)::text ~~ '%hogehoge%'::text)
  ->  Bitmap Index Scan on Texts_index  (cost=0.00..31.00 rows=10 width=0) (actual time=1514.642..1514.642 rows=999 loops=1)
        Index Cond: ((text_body)::text ~~ '%hogehoge%'::text)
Total runtime: 1573.718 ms
Bitmap Heap Scan on "Texts"  (cost=88.46..204.18 rows=30 width=139) (actual time=406272.437..427309.329 rows=2999 loops=1)
  Recheck Cond: ((text_body)::text ~~ '%hogehoge%'::text)
  ->  Bitmap Index Scan on texts_index  (cost=0.00..88.46 rows=30 width=0) (actual time=406241.142..406241.142 rows=2999 loops=1)
        Index Cond: ((text_body)::text ~~ '%hogehoge%'::text)
Total runtime: 427419.800 ms