mysql笔记---索引篇

红黑树是二叉树平衡之后的结果;

B-树, 是红黑树本来一个节点存一个数据,改为一个节点存多条数据,

有几条数据,度的值就是多少,度的大小和CPU一次读取磁盘大小相匹配最好,度和实际存储的数据个数为<15/16最好

B+树,节点不存储数据,叶子节点存储数据,对比B-树,节点存储数据,这样可以使度的值变的更大

图示:

B-树

mysql笔记---索引篇_第1张图片

B+树

mysql笔记---索引篇_第2张图片

mysql笔记---索引篇_第3张图片

mysql索引(mysql引擎都是表级引擎)

myISAM引擎

主键索引存储的是行记录的文件指针,使用B+树(通过文件指针再去找索引,属于非聚集索引)

普通的索引同主键索引

innoDB引擎

主键:

数据和索引都存储到叶子节点上去(找到叶子,就找到了数据,属于聚集索引--叶子节点包含了完整的数据记录)

表数据文件本身就是按照B+树排列的;

inno必须要有主键;推荐使用整型的自增主键,便于节点存储比较,不会出现插入,树分裂,磁盘碎片;节点的比较是比较ASCII码;

普通索引叶子节点使用的是主键值;节省空间,降低维护索引的麻烦,数据要插入到主键索引树和普通索引上,会引起数据一致性问题;

innoDB支持事务,支持行锁,使用比较多

联合索引:B+树

多个单列索引多条件查询时只会生效第一个索引!所以多条件联合查询时最好建联合索引!

联合索引比对每个列分别建索引更有优势,因为索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。另外建立多列索引时,顺序也是需要注意的,应该将严格的索引放在前面,这样筛选的力度会更大,效率更高

创建(a,b,c)联合索引时,相当于创建了(a)单列索引(a,b)联合索引以及(a,b,c)联合索引

联合索引是参考https://blog.csdn.net/Abysscarry/article/details/80792876

MYISAM

MYD 后缀的是数据文件

MYI 索引文件后缀

索引的建立和使用:

索引尽量建立在不重复的数据上

 

 

 

 

你可能感兴趣的:(mysql)