H2 只允许真正的表列作为索引组件。它不允许像 PosgreSQL 和其他高端数据库引擎那样在其中使用表达式。
但是,您可以将计算列索引作为一种解决方法。例如:
create table t (
id int,
name varchar(20),
uname varchar(20) as upper(name)
);
create unique index ix1 on t (uname);
insert into t (id, name) values
(1, 'Chicago'),
(2, 'Montreal'),
(3, 'Monterrey');
那么,如果你尝试插入:
insert into t (id, name) values
(4, 'montreal');
按预期失败:
错误:唯一索引或主键违规:“IX1 ON PUBLIC.T(UNAME) VALUES ('MONTREAL', 2)”; SQL 语句:
插入 t (id, name) 值
(4, '蒙特利尔') [23505-197]
SQL 状态:23505
错误代码:23505
此外,索引还用于搜索信息。例如,以下SELECT 按预期使用索引:
explain plan for
select uname from t where uname = 'MONTREAL';
执行计划:
SELECT
UNAME
FROM PUBLIC.T
/* PUBLIC.IX1: UNAME = 'MONTREAL' */
WHERE UNAME = 'MONTREAL'