`
coolsooner
  • 浏览: 1303052 次
文章分类
社区版块
存档分类
最新评论

索引的种类与B*树索引 简单归纳总结

 
阅读更多
索引的种类:
1,B*树索引
2,位图索引
3,位图联结索引
4,基于函数的索引
5,应用域索引


B*树索引
最底层的是叶子节点(leaf node),包含索引键以及一个rowid。
中间是分支块(branch block),用于导航。
最顶是根块。
索引的叶子节点间构成了双向链表,可供索引区间扫描。例子:where x between 20 and 30;就可以在找到20后,水平地扫描叶子节点链表,而不


用再再索引结构中导航。
B*树是平衡树,有高度(height),从根块到叶子快的遍历,都会访问同样数目的块。大多数高度是2或3,所以基本都是2或3次I/O就能找到rowid。


select index_name,blevel,num_rows
from user_indexes
where table_name = 'BIG_TABLE'
blevel是分支层数,加1就是b树高度了。


什么情况下应该使用B*树索引
1.仅当要通过索引访问表中很少的一部分行(只占一个很小的百分比)。
对于瘦表(少列,列小),百分比为2%-3%;
对于肥表,百分比为20-25%;
原因:瘦表,即每行占得字节少,一个数据块就能包含更多的行;因为每读取一行都须完整I/O一个数据块,读取同样的行数时,瘦表所须


I/O的数据块就少,全表扫描可能效果更好。结论:越瘦的表,百分比越小,越倾向可以使用全表扫描。

2.回答一个查询:索引包含了足够的信息来回答整个查询,而根本不必访问表,这种情况下,索引可以作为一个较瘦版本的表。


数据在磁盘上的物理组织形式,也会对索引的使用性能有影响。
从一个1000行的索引返回数据所用的时间与从一个100000行的索引结构中返回数据的时间是一样的,因为高度一样,I/O次数就一样。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics