MySQL选择B+tree作为索引数据结构的原因主要是考虑到磁盘I/O效率以及对大量数据和范围查询的支持能力。同时,MySQL中默认配置的一个节点(即磁盘块)通常能够存储16KB的数据,这也是设计索引结构时需要考虑的重要因素。
B+树由于非叶子节点不存储数据,而是只存储索引信息,使得单个节点能容纳更多的索引项,进而大幅提升了数据存储量。三层B+树理论上可以支持12亿条数据的存储,远高于B树,这对于大规模数据查询非常有利,且查询次数较少,通常只需经过3次I/O即可找到所需数据
为什么不推荐UUID做主键?
UUID它是没有任何规律的,这样它在插入的时候也没有规律,它可能就会插在这里,就会多一个分叉出来。在前边再插一条又多一个分叉,这边又多一个分叉。到最后可能这个节点它就保存了一条数据,这节点它也就保存了一个一条条数据。这样就会造成了一个配置之间的浪费,而betray就是因为这个原因而导致节点增多,层级增多的,所以不会用UUID来当主键
为什么不建议写select * ?
要避免回表,减少一次查询
为什么inno DB一定要建立一个主键索引?
主键索引它下边直接保存了数据。而非主键索引,它下边表保存的是标识,当查到标识之后,还要回表到主键索引来查询数据。所以它一定要建立主键索引
什么是回表?
inno DB索引获取的过程来看一下。首先是主键索引,然后主键索引它最下面直接保存了真正的数据。这边是根据name创建的索引。在name索引中他拿到主键值,再通过主键值到主键索引中获取数据。那么这一步到主键索引中获取数据就是回表。因为回表它多一步操作,所以咱们要尽量的避免回表
什么是索引覆盖?
所查询的字段是建立索引的字段,就不会回表查询其他字段,所以可以考虑将查询的列创建组合索引,避免回表操作,这样就会增加效率。不过也不能一直追求索引覆盖,需要评估,不然索引数据就会越来越大,也会影响效率的。
什么是最左原则?
查询语条件按照组合索引的顺序从左到右去匹配索引字段
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号