mysql索引为了解决什么问题
帮助我们更快的解决排好序的数据结构
索引的分类
1.二叉树
2.红黑树
3.b树
4b+树
二叉树
顾名思义,树的每个节点最多有两个子节点,他又可以分为满二叉树和完全二叉树
1.1满二叉树
这就是一个满二叉树,所有非子叶节点都存在左右两个子叶,并且所有叶子节点都在同一层级上
1.2完全二叉树
1.保证所有节点的树有同样的深度
2.只需保证最后一个节点前的节点都齐全即可
注意
一般来说,树的右子叶都大于树的根节点,放在右边的分叉,左子叶小于根节点,放在树的左边,如果说你把一串不断递增的数字变成一颗作为二叉树来处理,那么它就和我们另一种数据结构非常相似 单向链表
2.红黑树
红黑树就是我们二叉树的升级版,也叫二叉平衡树,当你单边元素比较多,多到2级,会自动帮你平衡,不要单边增长,也可以叫自旋
如这样一串二叉树
他现在的根节点是1,如果变成红黑树表示的话
当插入两个元素
当增加第三个节点时
当增加到三个节点会自动帮助我们平衡,变成这样
4个节点
所以说我们总结一下
当一边节点数深度超过2的时候,他就会发生旋转,改变他的上一级节点,这样我们查找数据就非常的方便了
这样看红黑比二叉树性能又高一点
6个节点二叉树要查询5次,而红黑树只查询3次就可以了
3.b树
叶子节点具有相同的深度,叶节点指针为空
所有索引元素不重复
节点索引从左向右排列
4.b+树
非子叶节点不储存data,只储存索引,可以放更多的索引,
叶子节点包含所有索引字段
叶子节点用指针链接,提高区域访问功能
mysql
数据都储存在data目录下
打开你会发现
其实里面的文件夹都是和你的库名时一一对应的
也就是说你建立的数据库都会保存在我们的data目录下,在我们安装mysql时创建的my.ini文件会有一个存放路径,大家回头可以去看一下
然后打开一个库,你会发现表名都是一个.frm和.ibd文件这里我们使用的时innerdb引擎,所以只会有两张表,.ibd是储存索引和数据,.frm是储存他表的基本结构
我们现在是innerdb引擎
但是如果我们改成的是mysam引擎的话
他会生成三个文件
和之前一样 .frm存储数据结构
.MYD文件存储数据
.MYI存储索引和字段
mysam使用的是非聚集索引而innerdb使用的是聚集索引,怎么区分就可以理解innerdb数据和索引存放在一起,而mysam将数据与索引分开,通过索引储存的内存地址去寻找数据的内存地址
innerdb表推荐使用主键,最好是整形自增主键
应为innerdb数据都是和主键存放在一起,如果没有主键,他会自动寻找一列没有重复的数据作为主键,如果没有的话他会自动创建一列数据作为主键,为什么要使用整形自增主键,就是为了方便比较,如果是字符串的话,他会先转化asci码,在比较,速度比较慢
像数据库的话99.9的数据库底层都是b+树,另外的是hash码存储数据,如果大量数据hash码查找数据非常得快,比我们b+树要快的多,问什么不用,因为他不能进行范围查找,效率低下,向我们平时很多项目都需要用到范围查找,他不行,所以就没用到了
以上仅个人观点,不对之处希望大家多多指点