Table 在 PostgreSQL 上建立索引以提高性能

Table Indexing on PostgreSQL for performance

我正在解决 PostgreSQL 的性能问题,我有以下 table:

 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),
   ....
 )

Above table 有 34 列,包括 3 FOREIGN KEYs,它有超过 100 万行数据。我有以下条件 SELECT 查询:

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

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

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

CREATE EXTENSION pg_trgm;

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