PostgreSQL没有在通配符上使用索引

时间:2016-02-01 23:13:03

标签: postgresql indexing pattern-matching

我有个人桌子。我想通过使用字段SpeedInfo speedInfo = request.getSpeedInfo(); if (speedInfo == null || // short circuit here means speedInfo.getBandwidth() == null || // that here speedInfo is not null speedInfo.getBandwidth().isEmpty()) { // Assuming getBandwidth() is a String or similar throw new Exception(" SpeedInfo Bandwidth must be passed in the request "); } 来查找它们,字段person_code是一个字母数字字符串。我创建了一个索引:

create index my_idx on persons( some_function(person_code) )

但是,当我尝试这样的事情时:

select * from persons where some_function(person_code) like 'mycode%'

我最终进行了顺序扫描而不是索引扫描。根据{{​​3}},LIKE应该使用索引,只要匹配模式是一个常量并锚定到字符串的开头。

1 个答案:

答案 0 :(得分:0)

如果没有EXPLAIN ANALYZE的示例查询,很难协助解决您的问题,但您可以查看 pg_trgm 模块hereILIKE/LIKE操作的示例索引可能如下:

CREATE INDEX idx_persons_person_code_trgm ON person USING gin (person_code gin_trgm_ops);

值得检查的文章: