在 PostgreSQL 中,表达式索引(Expression Index),也常被称为函数索引(Function-Based Index),是一种非常强大且常用的性能优化工具。 传统的索引是基于表中原生的列值构建的,而表达式索引是基于对一列或多列应用函数或标量表达式计算后的结果来构建的。 简单来说:它不存原始数据,而是把计算后的结果存入索引树中。 --- 一、 为什么需要表达式索引? 在没有表达式索引的情况下,如果你在查询的 条件中对列使用了函数或数学运算,PostgreSQL 的查询优化器通常无法使用常规索引,只能退化为全表扫描(Seq Scan)。 反面例子: 假设你在 列上有一个普通索引。 因为普通索引树里存的是区分大小写的原始数据(如 ),数据库为了找到匹配项,必须把表里所有的记录拿出来,逐一执行 函数,然后再比较。 解决方案:创建表达式索引 现在,索引树里直接存入了转化为小写后的值。当执行上述查询时,数据库可以直接走索引,性能成百上千倍提升。 --- 二、 核心语法与注意事项 基本语法 ⚠️ 极其重要的前提条件:函数必须是 IMMUTABLE(不可变) 你不能对 或 ...