我正在解决 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/