日期:2014-05-18  浏览次数:20539 次

对于数据库的索引,是不是这么理解。。
比如一个表
gid gname
1 zhangsan
2 cccc
3 lisi
4 bbbb
5 gggggg
---------------------
在gname列建立索引,就变成按照字母排序,当在搜索的时候,如like 'c%'的时候,会直接跳到CCCC所在的行,就不会从头开始搜索了,我的装个理解对吗?如果不对,哪错了?
 gname
 bbbb
 cccc
 gggggg
 lisi
 zhanghong

------解决方案--------------------
在gname列建立索引,就变成按照字母排序,当在搜索的时候,如like 'c%'的时候,会直接跳到CCCC所在的行,就不会从头开始搜索了,我的装个理解对吗?如果不对,哪错了? 
------
如上所说 like不扫描索引页 如果索引被利用到(依据执行计划) 会根据列值做index scan or index seek 非簇级索引查到B树底部会找到数据页指针 然后磁头再去寻找对应数据页页面;簇级索引查到B树底部也就找到了对应的数据 

形象地理解 索引就是字典的目录
------解决方案--------------------
在gname列建立索引,就变成按照字母排序,当在搜索的时候,如like 'c%'的时候,会直接跳到CCCC所在的行,就不会从头开始搜索了,我的装个理解对吗?如果不对,哪错了? 
---------------------------------------------
建索引的过程不会移动表本身的数据,索引只是记录每条记录的物理位置。
如果你查询中指定 gname = 'cccc',那么数据库引擎就检索索引,发现其实际的物理位置,直接去读那条记录...

这是最简单的说明而已,实际情况比这个复杂,不同类型的索引又稍有不同,比如6楼说的。

LIKE在索引里面的讨论似乎可以专门开个100分的帖子让大虾们讨论一下,呵呵