- 论坛徽章:
- 0
|
原帖由 liujin_l 于 2006-1-13 16:49 发表
先谢谢了!
好像明白点了
如果查询条件用的是like,建索引能提高速度吗?
like有可能用到索引,也可能用不到。
比如有个表A,字段colA char(20),colB char(5),colC char(10),colD integer,colE date,并且在colA字段上建立了索引,colB + colC + colE建立了复合索引
如下查询是用到索引的(这两个语句等价):
select *
from A
where colA like "abc%";
select *
from A
where colA[1,3] = "abc";
如下查询是用不到索引的
(这两个语句等价):
select *
from A
where colA like "%abc";
select *
from A
where colA[18,20] = "abc";
如下查询也是是用不到索引的:
select *
from A
where colA like "%abc%";
select *
from A
where colC like "abc%";
select *
from A
where colB like "%abc";
以下查询是可以用到索引的:
select *
from A
where colB like "abc%";
一句话,like或者matches操作符,被操作的字符串通配符在字符串后,是可以用到索引的,通配符在字符串前部分,是不能用到索引的。
原因是,索引文件是B+树(也可能是B-树),在排序时是从索引列的串首至串尾排序的,所以通配符在串首,是不能利用B+树快速查找定位的。
[ 本帖最后由 xxyyy 于 2006-1-14 19:57 编辑 ] |
|