360建站平台,网站维护开发合同,南京做网站优化的企业,apple开发者中心推荐
1 索引下推
Mysql性能优化#xff1a;什么是索引下推#xff1f;
1.1 定义
索引下推#xff08;Index Condition Pushdown#xff0c;简称 ICP#xff09;是一种数据库优化技术。在传统的数据库查询中#xff0c;数据库首先使用索引检索来找到符合索引条件的行什么是索引下推
1.1 定义
索引下推Index Condition Pushdown简称 ICP是一种数据库优化技术。在传统的数据库查询中数据库首先使用索引检索来找到符合索引条件的行然后将这些行的数据从存储引擎中读取到内存接着再过滤掉不满足其他WHERE子句条件的行。而在索引下推技术中某些可以被下推的过滤条件被应用在索引扫描阶段即在从存储引擎取数据之前从而避免了取出不必要的行。
1.2 建议参考推荐文章中的例子
2 mysql的b树一般是几层
2到3层就可以一个节点存储的数据量是一页(理解这一点很重要)一页默认是16KB假设主键是int类型那么一个节点能存储key的数量(161024)÷(46)16386B是指针的大小那么三层B树叶子节点的数量就有163816382683044个每个节点是一页假设一行数据是1KB那么一个节点能存16行数据所以3层B树总共能存储的数据量是2683044*1642928704行。
2 mysql的大小表前后顺序对inner join的效率有影响吗
mysql的大小表前后顺序对inner join的效率有影响吗
3 为什么MySQL索引要使用B树而不是B树或者红黑树 范围查询效率: B树的叶子节点之间通过指针连接这使得范围查询更加高效。当需要进行范围查询时B树可以从范围的起始点开始在叶子节点层顺序读取数据直到范围的结束点。而在B树中范围查询可能需要在多个层级中进行遍历。 查询稳定性: B树查询的性能更加稳定。由于所有的数据都位于B树的叶子节点每次查询无论命中还是未命中所需要遍历的路径长度都大致相同。而B树由于数据分布于各个节点查询的路径长度可能会有所不同。 空间利用率: 由于B树非叶子节点不存储数据只存储键和子节点指针因此每个节点可以存储更多的键。这使得B树的分支因子更大树的高度更低。 红黑树: 红黑树是一种自平衡的二叉搜索树用于保证在最坏的情况下树的高度不超过2*log(n)。但是在数据库中由于数据存储在磁盘上我们更关心磁盘I/O次数而非比较次数。B树因其高的分支因子对于磁盘I/O进行了优化通常在查找时会比红黑树产生更少的磁盘I/O。
4 关于B树和B树的高度:
一般一个B树节点占用一个页面如果一个B树的节点也占用一个页面因为B树的非叶节点存储了数据那么一个页面能存储的B树的分支数更少所以理论上B树更高对不对
你是对的如果B树的非叶子节点也存储数据并且一个节点限制为一个页面的大小那么B树每个节点能存储的子节点数确实会比B树少。这也意味着B树的高度可能会比B树更高。
但是B树的一个节点可以存储更多的数据因为非叶子节点也存数据。如果我们只看数据存储的能力B树可能更加高效。但是正如前面所述B树对于范围查询、稳定的查询性能、以及空间利用率方面都有优势。这些优势使得B树更适合用于数据库索引。
总的来说选择B树作为MySQL的索引结构并不仅仅是基于树的高度或者一个节点可以存储的数据量而是基于其在多个方面的综合性能优势。