PostgreSQL。全文搜索性能
全部! 我在PostgreSQL 9.3中创建了一个表,其中包含大约2400万条记录,其结构如下: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
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');
为什么有人在寻找牛奶,如果它在每一个记录?