mysql随手总结

1. 索引

索引:是排好序数据结构。很重要这句话

以至于有一个索引是 (“name”,"age")的话

查询语句是

select age from student where age = 1 是不会进入索引的,因为底层索引是排好序的

索引底层如果因为的BTree的话就会按照索引创建顺序,依次排序

2.B-Tree和B+Tree的区别

B+Tree是B-Tree改进版,适用于Mysql,

B+Tree中的非叶子节点的data移动到叶子节点,但是B-Tree是存在Data,不存在Data可以节省空间,存储更多非叶子节点

B+Tree叶子节点之间是从左到右依次递增排好序的,叶子节点之间是有相互指针箭头的,主要改进是为了范围查找

二叉树和红黑树(二叉平衡树)的高度不可控

B+Tree第一层非叶子节点是常驻磁盘的

3.存储引擎

存储引擎是形容数据库表的,表信息是存储在本地磁盘上的

一. MylSAM存储引擎:索引文件和数据库文件是分离的(非聚集)

MylSAM是表级锁,所以对写操作不友好

本地磁盘存储表的时候有三个文件夹

 frm:表结构相关信息  MYD :MylSAM + data数据的简写  MYI : MylSAM + index的简写

查询步骤:举例COL1 = 1

第一步:先检查COL1是否是索引字段

第二步:在MYI中查找索引文件,找到磁盘地址

第三步:根据磁盘地址找到MYD文件中对应的主键从而找到对应的数据

二.InnoDB引擎 (聚集)

InnoDB是行级锁,对写友好,查询慢,支持事务

本地磁盘存储表的时候有两个文件

frm:表结构相关信息 idb : index + data

查询步骤:举例COL1 = 1

第一步:先检查COL1是否是索引字段

第二步:在idb中查找索引文件和数据文件

既是索引未见也是数据文件,在ibd就可以查找

聚集索引,叶节点包含了完整的数据记录

4. 问题汇总及解答

一,不建立多个单值索引

二,索引最左前缀原则:不能里哦啊过任何一个值,只能从第一个开始用,从第二个是不走索引的,原因是索引都是排好序的数据结构,从第二个开始查询就不是排好序的了

三,聚集索引:叶节点包含数据+索引 (一个文件中查询)

非聚集索引:叶节点只包含索引:两个文件中查询,数据和索引是分开的

四:InnoDB表必须建立主键,并推荐使用整形的自增类型

设计如此,如果没有主键会自己找一列,当前列的数据是不重复的,会作为默认主键,如果没有会建立隐藏列增加磁盘压力。

自增的整型是因为会经历比大小,整型比较快,省时间和内存,占用存储空间比较小,效率比较高

五,为什么非主键的索引结构叶子节点存储的是主键值

一致性得到保证,而且节省存储空间

六,为什么索引用B+tree而不用Hash的原因

因为范围查找。

 

 

你可能感兴趣的:(底层,mysql,数据结构,索引)