索引扫描和索引查找有什么区别? 不都是查找索引上的值然后定位到相应的数据吗
比如一个表有20个列
1 搜索时 表扫描是20个列的数据都扫描吗?
2 搜索时 索引扫描是只扫描索引吗?
3 那么索引查找呢?
虽然都是通过索引取到相应数据,但是两者在过程上还是有区别的
索引扫描几乎与表扫描没有区别,都是把索引从开始扫描到结束,
而索引查找就不一样了,会根据你查询的字符,定位到索引的局部位置,然后再开始查找,不用把整个索引全部扫描一遍,在效率上比索引扫描快很多
索引扫描不是扫描索引就够了吗? 表扫描扫描整个表(包括没有作为条件的列 比如表中有20个列 表扫描是每一行的20列都扫描 而索引扫描时扫描相应的索引)
那么索引查找的方式呢?
@koi:
扫描索引的最终目的是什么?通过索引找到数据对不对?除非你的返回列只有索引列那就不需要通过索引再去找到相应的数据,因为索引列本身就包含了该列的所有数据,
另外表扫描因该也是根据where的条件与返回列扫描表,然后返回指定列,因该是不会把所有列都扫描 除非你是select *
索引查找:通过索引键找到索引的叶子节点,再通过叶子节点的标记快速找到表中对应的行数据,再返回指定的列
索引找查是通过索引键定先位到一块局部区域,再开始扫描匹配的数据的。
对于索引知识 推荐园子一位sql 大牛的博客
http://www.cnblogs.com/CareySon/
@Zery-zhang: 我想知道的是表扫描和索引扫描的区别,你说的好像是索引查找和表扫描的区别
@koi:
我先假设你有两张表A 与B 都有 UserId UserName UserAge这三个字段
然后在A表的UserId上建立了一个聚焦索引 B表没有建任何索引 这样来对比 索引扫描与表扫描的区别
先看一张索引结构图
索引 是一种B树结构,具体知识你自己了解吧,我只写区别了啊~~
现在假设要获取UserId的值
那SQLserver是如何通过索引找到数据的呢
1 先找到根结点(第一层),
2 通过根结点找到非叶子节点(第二层)
3 通过非叶子节点找到叶子节点(注:聚焦索引的叶子节点,存的就是索引列的数据也就是UserId的值 )
通过以上三步可以通过索引找到数据,那索引扫描就是把所有的数据通过索引查找出来。
表扫描:这个简单了直接从表的数据页页的第一页开始直到最后一页,然后取出UserId的值
以上就是索引扫描与表扫描的区别,看还开了个贴,要不顺便一起回答了呗~~~