带着问题学习
1. mysql为什么不用二叉搜索树、平衡二叉树?一个元素
2. mysql为什么用B+Tree,不用B-Tree?
3. mysql为什么不建议用uuid当主键
4. mysql中的聚集索引,稀疏索如何理解ike'aaoodb定会用到索引么为什么不建议写select*from进行查询
6.
最左匹配原则怎么理解 ?
8.
为什么建议主键ID是递增的,和B+Tree有什么关系?
9.为什么innodb引擎要求一定要建立主键键索?
1.二叉树最差的情况是单一方向树 成了一个链表 io次数过多 ,平衡二叉树解决了二叉树io节点单向的问题 io次数相等 但是单节点存储数据过小 mysql单页数据是16k 浪费导致节点过多,io次数仍然庞大 b树虽然解决了二叉平衡树的问题 但是数据可能存在于非子节点上,性能不稳定,io次数不稳定,另外范围搜索不方便,b+树是数据存在叶子节点,索引存在非子节点,每个节点数据的时间复杂度一致io次数只跟数据规模有关,另外数据是使用双向链表有序连接的 适合范围查找
2.
UUID是一种全局唯一标识符,常被用作主键。然而,在MySQL数据库中,使用UUID作为主键可能会带来一些问题。本文将探讨为什么不建议使用UUID作为MySQL主键。 1>. UUID占用更多的存储空间 UUID是一个128位的数字,通常以36个字符的字符串形式表示。相比之下,整型主键只需要4个字节即可表示。使用UUID作为主键会占用更多的存储空间,导致索引和数据的存储变得更加庞大。 2>. UUID会导致索引性能下降 在MySQL中,主键是自动创建的唯一索引。使用UUID作为主键会导致索引树的深度增加,从而降低索引的查询效率。此外,UUID是随机生成的,无法预测其值的范围,也会导致索引的分裂和碎片化,进一步降低索引的性能。 3>. UUID会导致数据排序性能下降 noDB引擎使用聚簇索引来存储数据。聚簇索引是按照主键顺序来存储数据的。使用UUID作为主键会导致数据的随机分布,无法按照顺序进行排序,进而导致数据的存储和查询性能下降。 4>. UUID会导致数据的备份和恢复变得更加困难 使用UUID作为主键会导致数据的备份和恢复变得更加困难。由于UUID是随机生成的,无法预测其值的范围,备份和恢复时需要将整个表进行复制,增加了存储和网络带宽的负担。 尽管UUID是一种全局唯一标识符,但在MySQL中,使用UUID作为主键可能会带来一些问题。如果需要使用UUID,可以考虑将其作为辅助索引,而不是主键。对于主键,建议使用自增整型类型,可以提高索引和数据的存储和查询性能,同时也方便备份和恢复数据。
3. 聚簇索引是指数据有序存储,非聚簇索引则表示数据随机存储,但是如果需要快速找到数据,需要建立大量的索引,伴随着的是稠密索引,聚簇索引则可以使用少量的索引,也就是稀疏索引,减少索引文件的存储空间。 select * from 可能导致回表次数增加,正常如果只是走索引列的话 可以取出索引列和主键,不需要回表查询,但是如果是多列的话就导致必须用主键回表重新查一次数据,如果多列,可以考虑使用联合索引
6 mysql索引以最左边匹配的索引列为准
8 保证数据插入顺序,减少叶碎片,进而减少节点数据和数据空间的使用率
9. 默认自动创建主键,不过是以整条数据为准,结果如上面的uuid,数据插入无序化,浪费页存储和节点 造成查表io以及回标次数增加