我有一个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)),因为它违背了使用小写索引的目的。
答案 0 :(得分:3)
我不想使用:...其中lower(company.department)= lower($ 1)),因为它违背了使用小写索引的目的。
相反,只有在查询中使用与索引中完全相同的表达式时,才会使用索引。请参阅文档中的Indexes on Expressions。
答案 1 :(得分:1)
表达式:
where lower(company.department) = lower($1)),
不会破坏拥有小写索引的目的。 正好你想拥有它的原因。使用索引的重要因素是表达式lower(company.department)
,因为这是用于构建索引的表达式。