Mysql设计的使用场景比较广泛,需要对遍历查询、单条查询、数据更新都需要较好的性能支持。B+树的特性是只在叶子节点上存储数据。可以从数据读写方面与哈希表、有序数组、b树其他几种索引模型进行比较:
哈希表:哈希表只能进行等值查询,在处理范围查询和排序查询时,需要全表扫描哈希表。
有序数组:有序数组在进行数据更新时成本较大。往数组中间位置添加数据时,需要移动后面的数据位置。
B树:b树在非叶子节点上也存储数据,在遍历数据时,需要对不同层级的节点上的数据进行拼接和排序,这会导致多次磁盘io。查询效率较低。
如何删除百万级别或以上的数据?可以考虑先删掉表的索引,等删除数据后再重建索引。当我们在进行数据修改时,需要同时修改索引,这些额外的索引维护成本较低数据修改的效率;同时,大量的数据删除会导致索引数据页产生大量的碎片空间,此时删除数据后重建索引可以使索引树更“紧凑”,提高磁盘空间利用率。
Innodb中的B+树模型中,N叉树的N能否被修改?
通过调整索引字段大小来修改
N 叉树中非叶子节点存放的是索引信息,索引包含 Key 和 Point 指针。Point 指针固定为 6 个字节,假如 Key 为 10 个字节,那么单个索引就是 16 个字节。如果 B + 树中页大小为 16 K,那么一个页就可以存储 1024 个索引,此时 N 就等于 1024。我们通过改变 Key 的大小,就可以改变 N 的值。
通过修改页大小间接修改,页越大,每页存放的索引数量就越多,N就越大。
数据页调整后,如果数据页太小层数会太深,数据页太大,加载到内存的时间和单个数据页查询时间会提高,需要达到平衡才行。
如何知道语句有没有走索引查询?可以利用 explain 查看 sql 语句的执行计划,通过执行计划来分析索引使用情况。
写在最后喜欢本文的朋友,欢迎关注公众号「会玩 code」,专注大白话分享实用技术。
回复【mysql】获取免费测试数据库!!
回复【pdf】获取持续更新海量学习资料!!