首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PostgreSQL不使用trigram索引

为什么PostgreSQL不使用trigram索引
EN

Stack Overflow用户
提问于 2019-01-30 02:43:36
回答 1查看 1.4K关注 0票数 5

我创建了一个trigram索引,以便执行具有'like %text%‘条件的查询,但是PostgreSQL 9.6没有使用索引来执行查询。

代码语言:javascript
复制
CREATE EXTENSION pg_trgm;  

CREATE INDEX tb_estabelecimento_index08
  ON tb_estabelecimento
  USING gin
  (nm_estabelecimento COLLATE pg_catalog."default" 
  gin_trgm_ops);

当我执行查询时:

代码语言:javascript
复制
SELECT * FROM tb_estabelecimento WHERE 
nm_estabelecimento LIKE '%SOMETEXT%'

PostgreSQL给出了查询计划:

代码语言:javascript
复制
Seq Scan on tb_estabelecimento  (cost=0.00..1.16 
rows=1 width=1706)
Filter: ((nm_estabelecimento)::text ~~                
'%SOMETEXT%'::text)"

为什么PostgreSQL要执行顺序扫描而不是使用索引?

我的桌子:

代码语言:javascript
复制
CREATE TABLE tb_estabelecimento
(
  id_estabelecimento integer NOT NULL,
  nm_estabelecimento character varying(100) NOT NULL, 
  ds_url_website character varying(1000), 
  nm_municipio character varying(200), 
  id_unidade_federacao integer NOT NULL,
  CONSTRAINT tb_estabelecimento_pk PRIMARY KEY (id_estabelecimento),
  CONSTRAINT tb_estabelecimento_uk UNIQUE (nm_estabelecimento, nm_municipio, id_unidade_federacao)

我的数据库:

代码语言:javascript
复制
CREATE DATABASE my_database_name
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'Portuguese_Brazil.1252'
       LC_CTYPE = 'Portuguese_Brazil.1252'
       CONNECTION LIMIT = -1;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 11:34:27

您没有告诉我们该表有多少行,但我想很少有足够多的行,以至于PostgreSQL总是使用顺序扫描(因为它是最便宜的)。

要查看是否可以使用索引,请暂时阻止优化器使用顺序扫描:

代码语言:javascript
复制
SET enable_seqscan = off;

如果查询之后没有使用索引,那么索引实际上是不可用的(但在我看来还可以)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54432677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档