使用 LIKE 的子字符串搜索是否受益于索引?

Does a substring search with LIKE benefit from an index?

假设在 HSQLDB 中有以下 table 定义:

create table message(id varchar(255) primary key not null, data clob not null);

HSQLDB 在 id 上自动创建的索引(作为主键)是否会加速如下子字符串搜索?

select * from message where id like 'foo:%'

显然,子字符串搜索确实受益于该列的索引。

运行

explain plan for select * from message where id like 'foo:%'

给我

…
access=INDEX PRED
…

就像简单的等号比较一样。这似乎适用于任何子字符串,例如'%foo%',不仅仅是字符串的开头。

为了比较,如果我在 data 列上尝试相同的操作(没有索引,因此需要完整的 table 扫描),我会得到

…
access=FULL SCAN
…