使用 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
…
假设在 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
…