Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用lower()索引进行Postgres搜索_Sql_Postgresql_Postgresql 9.3_Postgresql 9.4 - Fatal编程技术网

Sql 使用lower()索引进行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

我有一个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);
当我执行输入字符串为小写“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
不是索引表达式的一部分,请参见语法: