Sql 使用lower()索引进行Postgres搜索
我有一个Postgres表,其中包含一个列,该列带有大小写字符Sql 使用lower()索引进行Postgres搜索,sql,postgresql,postgresql-9.3,postgresql-9.4,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
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);
当我执行输入字符串为小写“repair”的查询时,我不会得到匹配项
select company.id from company where company.department = lower($1));
为什么Postgres不使用小写索引来匹配小写字符串
我不想使用:…where lower(company.department)=lower($1)),因为它违背了使用小写索引的目的
我不想使用:…where lower(company.department)=lower($1)),因为它违背了使用小写索引的目的
相反,只有在查询中使用与索引中完全相同的表达式时,才会使用索引。请参阅文档中的
我不想使用:…where lower(company.department)=lower($1)),因为它违背了使用小写索引的目的
相反,只有在查询中使用与索引中完全相同的表达式时,才会使用索引。请参见文档中的。表达式:
where lower(company.department) = lower($1)),
不会破坏使用小写索引的目的。这正是你想要一个的原因。使用索引最重要的是表达式lower(company.department)
,因为这是用于构建索引的表达式。表达式:
where lower(company.department) = lower($1)),
不会破坏使用小写索引的目的。这正是你想要一个的原因。使用索引最重要的是表达式
lower(company.department)
,因为这是用于构建索引的表达式。No,在这种情况下,规划人员知道它可以使用索引。没有进行任何转换,它只是在索引中搜索。在department=$1
的情况下,除了对表进行seq扫描之外,它没有其他选项。@Klim但如果我使用…where lower(company.department)=lower($1)),则这不是完全相同的表达式,因为索引最后还包含ASC null。表达式必须完全相同才能使用索引吗?ASC NULLS LAST
不是索引表达式的一部分,请参阅语法:否,在这种情况下,规划人员知道它可以使用索引。没有进行任何转换,它只是在索引中搜索。在department=$1
的情况下,除了对表进行seq扫描之外,它没有其他选项。@Klim但如果我使用…where lower(company.department)=lower($1)),则这不是完全相同的表达式,因为索引最后还包含ASC null。表达式必须完全相同才能使用索引吗?ASC NULLS LAST
不是索引表达式的一部分,请参见语法: