【发布时间】:2018-04-20 09:40:04
【问题描述】:
我正在解决 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 KEYs,它有超过 100 万行数据。我有以下条件SELECT 查询:
SELECT * FROM main_transaction
WHERE upper(request_no) LIKE upper(concat('%','20080417-0258-0697','%'))
在 2 秒内返回结果。我想通过使用表索引来减少工作时间。到目前为止,我使用了btree 索引。但是,我没有注意到任何快速的结果。我的问题是,如何提高上述查询的性能?
【问题讨论】:
-
为什么是
%?搜索字符串已经具有该列的最大长度... -
('%','20080417-0258-0697','%') -> (('%',:field,'%') )
标签: postgresql indexing database-performance