使用lower()索引进行Postgres搜索

时间:2018-04-16 20:12:02

标签: sql postgresql postgresql-9.3 postgresql-9.4

我有一个Postgres表,其中包含大写和小写字符串的列。

Table: company
id| name    | department
------------------------
1 | LM Corp | Repair
2 | BMG Inc | Maintenance
3 | DFR LLC | shipping

使用pgAdmin我在列上创建了一个索引,如下所示:

CREATE INDEX companydepartment_index
ON public.company (lower(department) ASC NULLS LAST);

当我查询输入字符串是小写'修复'然后我没有得到一场比赛。

select company.id from company where company.department = lower($1));

为什么不使用小写索引来匹配小写字符串的Postgres?

我不想使用:...其中lower(company.department)= lower($ 1)),因为它违背了使用小写索引的目的。

2 个答案:

答案 0 :(得分:3)

  

我不想使用:...其中lower(company.department)= lower($ 1)),因为它违背了使用小写索引的目的。

相反,只有在查询中使用与索引中完全相同的表达式时,才会使用索引。请参阅文档中的Indexes on Expressions

答案 1 :(得分:1)

表达式:

where lower(company.department) = lower($1)),

会破坏拥有小写索引的目的。 正好你想拥有它的原因。使用索引的重要因素是表达式lower(company.department),因为这是用于构建索引的表达式。