8/18知识点整理

本文介绍了数据库索引的适用场景、底层实现,对比了B树与B+树,探讨了红黑树相对于二叉搜索树的优势。此外,详细讲解了数据库隔离级别和事务中的脏读、幻读等问题,以及GET和POST请求的区别。文章还阐述了Cookie与Session的差异,并分析了hash索引和B+树索引的优缺点。最后,深入讨论了Redis的RDB和AOF两种持久化策略及其优劣。
摘要由CSDN通过智能技术生成

一、哪些地方适合用索引?哪些不适合?

where,order by,group by中频繁出现,且数据分布比较离散的列适合创建索引。比如有个用户表,用户名,手机号经常会作为查询条件,且不同用户用户名,手机号都不同(数据较离散),因此适合创建索引。但是用户的性别,虽然也会经常作为查询条件,但是因为性别只有男,女,未知等几种,数据不够离散,因此不适合创建索引。

索引也是文件,当修改数据时要动态的修改索引,所以修改次数明显比查询要多的列不适合创建索引。

二、索引的底层实现

索引的目的在于提高查询效率。

通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。

当数据量相当大时,二叉树搜索树已经不足以满足我们的要求。所以我们引进了B+树这种为磁盘存储而设计的数据结构。

b+树可以把磁盘IO次数控制在一个很小的数量级(常数数量级)。

上图就是一颗b+树,b+树是一颗多叉搜索树,期中除了叶子节点其他节点存的只是范围,就像一本书的目录一样(图中蓝色代表范围,黄色代表指针),叶子节点中存储的才是真实的数据。

通常情况下,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

 

1.索引字段要尽量的小:通过上面的分析,我们知道IO次数取决于b+数的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。简单的说,字段越大,b+树的高度就会越高,查询效果就越差。

2.索引的最左匹配特性(即从左往右匹配):当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据

三、B树和B+树的区别

B树:所有节点都包含key和data,所有节点组成这棵树,并且叶子节点指针为null。

B+树:只有叶子节点存储真实数据,其他节点只存储范围和指针。叶子节点不存储指针。</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值