postgresql - PostgreSQL 上的表索引以提高性能

标签 postgresql indexing database-performance

我正在解决 PostgreSQL 上的性能问题,我有下表:

 CREATE TABLE main_transaction (
   id integer NOT NULL DEFAULT nextval('main_transaction_id_seq'::regclass),
   description character varying(255) NOT NULL,
   request_no character varying(18),
   account character varying(50),
   ....
 )

上表有 34 列,包括 3 个 FOREIGN KEY,它有超过 100 万行数据。我有以下条件 SELECT 查询:

SELECT * FROM main_transaction
WHERE upper(request_no) LIKE upper(concat('%','20080417-0258-0697','%'))

2秒以上返回结果。我想通过使用表索引来减少工作时间。到目前为止,我已经使用了btree 索引。但是,我没有注意到任何快速结果。我的问题是,如何提高上述查询的性能?

最佳答案

搜索以 % 开头的模式的唯一机会是三元组索引:

CREATE EXTENSION pg_trgm;

CREATE INDEX ON main_transaction
   USING gin (upper(request_no) gin_trgm_ops);

关于postgresql - PostgreSQL 上的表索引以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938650/

相关文章:

java - 计算每日最低余额

indexing - 在 ElasticSearch 中重新索引索引以更改分片数

MYSQL 复制缓慢但突然增加,然后在 mysql Slave 中再次缓慢无法

mysql - 慢速 SELECT COUNT(*)、information_schema、基数字段

sql-server - 为每个父级选择前 1 条记录时,子查询太慢

postgresql - Postgres 使用 cp1252 编码?

postgresql - 在有冲突的值中插入数组

postgresql - 在 PostGraphile 中处理列级选择授权的最佳实践

seo - 子域与子目录以阻止爬虫

ruby - 索引超出字符串, ruby