全文检索 (不包含、不等于) 索引优化 - 阿里云RDS PostgreSQL最佳实践
背景
PostgreSQL内置了GIN索引,支持全文检索,支持数组检索等多值数据类型的检索。
在全文检索中,不包含某个关键字能用到索引吗?
实际上GIN是倒排索引,不包含某个关键字的查询,实际上是跳过主tree上面的TOKEN的扫描。
只要被跳过的TOKEN包含了大量数据,那么就是划算的。PostgreSQL是基于CBO的执行计划优化器,所以会自动选择最优的索引。
例子1,全文检索不包含查询
1、创建测试表
postgres=# create table notcontain (id int, info tsvector);
CREATE TABLE
2、创建生成随机字符串的函数
CREATE OR REPLACE FUNCTION
gen_rand_str(integer)
RETURNS text
LANGU