24

我有一个数据库,并且希望能够在表中查找类似于以下内容的搜索: select * from table where column like "abc%def%ghi" or select * from table where column like "%def%ghi" Is有没有办法索引列,这样就不会太慢?

编辑:我还可以澄清一下数据库是只读的,不会经常更新。

4

3 回答 3

28

文本搜索和索引选项包括:

从上面给出的最少信息来看,我想说只有三元组索引才能为您提供帮助,因为您正在对字符串进行中缀搜索而不是查找字典单词。不幸的是,三元组索引很大而且效率很低。不要指望某种神奇的性能提升,请记住,它们需要大量工作来构建数据库引擎并保持最新状态。

于 2013-07-15T03:19:26.577 回答
6

对于like操作员,请使用操作员类之一varchar_pattern_opstext_pattern_ops

create index test_index on test_table (col varchar_pattern_ops);

这仅在模式不以 a 开头时才有效,%在这种情况下需要另一种策略。

于 2013-07-13T19:27:28.617 回答
6

例如,如果您只需要在整个表中获取唯一的子字符串,您可以创建一个子字符串索引:

CREATE INDEX  i_test_sbstr ON tablename (substring(columname, 5, 3)); 
-- start at position 5, go for 3 characters

It is important that the substring() parameters in the index definition are
the same as you use in your query.

参考:http ://www.postgresql.org/message-id/BANLkTinjUhGMc985QhDHKunHadM0MsGhjg@mail.gmail.com

于 2014-11-13T18:51:43.283 回答