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 KEY
s,它有超过 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);
我正在解决 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 KEY
s,它有超过 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);