PostgreSQL。全文搜索性能

PostgreSQL。全文搜索性能,postgresql,full-text-search,Postgresql,Full Text Search,全部! 我在PostgreSQL 9.3中创建了一个表,其中包含大约2400万条记录,其结构如下: CREATE TABLE jtest ( recordid uuid NOT NULL, details json, tsv tsvector, CONSTRAINT jtest_pkey PRIMARY KEY (recordid) ) WITH ( OIDS=FALSE ); trigger根据json内容填写的tsv列: to_tsvector('english',js

全部! 我在PostgreSQL 9.3中创建了一个表,其中包含大约2400万条记录,其结构如下:

CREATE TABLE jtest
(
  recordid uuid NOT NULL,
  details json,
  tsv tsvector,
  CONSTRAINT jtest_pkey PRIMARY KEY (recordid)
)
WITH (
  OIDS=FALSE
);
trigger根据json内容填写的tsv列: to_tsvector('english',json_extract_path_text)(详细信息,'info')

json结构中的字段信息具有类似的内容。例如,“来自制造商1的牛奶”、“来自另两个制造商的牛奶”。大约有100万条记录包含“牛奶”

如果我使用以下查询:

从jtest where tsv@@to_tsquery('english','milk')中选择recordid

不要在tsv列上使用任何索引,该查询大约需要250秒。如果我在tsv字段上创建gin索引,则该查询大约需要200秒


是否有可能提高性能?

答案在于以下问题:

大约有100万条记录包含“牛奶”

不管是否索引,您仍然需要检索那一百万行。还要注意,如果一百万表示大多数行,Postgres将完全忽略索引,并按顺序扫描整个表

如果将查询更改为:

select recordid from jtest where tsv @@ to_tsquery('english', 'rare string');

为什么有人在寻找牛奶,如果它在每一个记录?