代码之家  ›  专栏  ›  技术社区  ›  Jimski

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

  •  1
  • Jimski  · 技术社区  · 6 年前

    我有一个Postgres表,其中包含一个列,该列带有大小写字符的stings。

    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不使用小写索引来匹配小写字符串?

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

    2 回复  |  直到 3 年前
        1
  •  3
  •   klin    6 年前

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

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

        2
  •  1
  •   Gordon Linoff    6 年前

    表达式:

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

    放弃使用小写索引的目的。是的 确切地 你想要一个的原因。使用索引最重要的是表达式 lower(company.department) ,因为这是用于构建索引的表达式。