For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习Java编程等互联网技术,而本文我们就简单来了解一下,数据库B+树概念与用法。
1、b+树的查找过程
B+树是一个N叉树,每个节点有索引和指针。如果查找数据项28。
先会把磁盘块1加载到内存,此时发生一次IO,在内存中使用二分查找确定28在17和35之间
找到磁盘1中的P2指针,通过磁盘1的P2指针指向的磁盘3加载到内存,发生二次IO
28在26和30之间,找到磁盘3的P2指针指向磁盘8,把磁盘8加载到内存中,发生三次IO
在内存中做二分查找找到28,总共三次IO
真实情况是,三层的b+树可以表示上百万的数据,如果百万的数据只需要三次IO,性能将会很大的提升,没有索引,查询每条数据都需要发生一次IO,查询的效率很低。
通过分析,我们可以知道IO次数取决于b+树的高度,当数据一定时,每个磁盘的数量越大,树的高度就越小,磁盘的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度就越低,所以在选择索引字段的时候要尽量小,比如int4个字节要比bigint占8个字节少占一半。
2、B+树和B树的区别
b树节点存储数据,b+树的节点不存储数据,只是存索引,数据都存储在叶子节点。
b+树叶子节点用链表串联起来,而b树没有。
3、创建索引的几个原则
左匹配原则,mysql会一直向右匹配知道遇到范围查询(>、<、between、like)就停止匹配,比如a=1andb=2andc>3andd=4,如果建立(a,b,c,d)顺序的索引,d是用不到索引的。如果建立(a,b,d,c)的索引都可以用到,a、b、d的顺序可以任意调整。
=和in可以乱序,比如a=1andb=2andc=3建立(a,b,c)索引可以任意顺序,mysql查询优化器会优化查询索引
尽量选择区分度高的列作为索引,区分度指的字段的不重复性比例,比例越大,扫描的记录就越少,键的区分度是1,而一些状态,性别区分度在数据量大的面前区分度就是0
索引不能参与计算,保持列的干净,不能在索引列上添加函数,或者运算之类。因为b+树存储的是数据表的数据,而经过运算的数据和b+树上的数据不能做比较,导致索引失效
尽量的扩展索引,不要新建索引。比如表中原来有a的索引,现在要添加b的索引,把原来的索引扩展成(a,b)的索引即可。因为没建一个索引,就需要创建一个b+树。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音达内三江区域学习了解。