From e35ebb8ba5ffc34a848db854fe3b5dd5562c3118 Mon Sep 17 00:00:00 2001 From: lixicai <1210922622@qq.com> Date: Fri, 31 Mar 2023 00:07:59 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B43=E6=9C=8831=E6=97=A500:07:57?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MySQL性能调优与架构设计.md | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/MySQL性能调优与架构设计.md b/MySQL性能调优与架构设计.md index 0fd8abf..ef1dea8 100644 --- a/MySQL性能调优与架构设计.md +++ b/MySQL性能调优与架构设计.md @@ -110,3 +110,77 @@ hash冲突? ### B+Tree索引 +- 基础知识:二分查找VS顺序查找 + +## 二叉查找树 + +- 左子树的所有值小于根节点的值 +- 右子树的所有值大于等于根 +- 左右子树都满足上述两个条件。 + +## AVL树 + +- 它的左右两个子树的高度差的绝对值不超过1 +- 左右两个子树都是一颗平衡二叉树 + +## B+树(mysql) + +- 多叉平衡查找树 + +> [数据结构演示](http://www.cs.usfca.edu) + +标准的B+树叶子结点是单链表,但是mysql中优化了一下是双链表。 + +旋转、构建细节。java岗位不会问,做数据库实现。算法导论。 + +B+树含有非常高的扇出,通常超过100,在查找一个记录时候,可以有效的减少IO操作。 + +## B树 + +- 在B+树的前提上,非叶子节点也存数据 + +## B*树(oracle) + +- 在B+树的前提下,非叶子节点的同级也有链表的结构,在索引查询上比B+树更加有优势 + +## 聚集索引/聚簇索引 + +将表的主键用来构造一颗B+树,并且将整张表的行记录数据存放在该B+树的叶子节点中。 + +如果表中没有设置主键,那么会有一个rowid + +## 辅助索引/二级索引 + + 叶子节点除了数据外,每个叶子节点的索引行还包含一个书签(bookmark)每个索引一颗B+树,不包含行记录的全部数据。 + +## 回表 + +通过辅助索引获得主键,然后再通过主键索引来找到一个完整的行记录。 + +MySQL 通过查询优化器去判断用什么索引,或者全表扫描 + +## 联合索引/复合索引 + +将表上的多个列组合起来进行索引我们称为联合索引或者复合索引。 + +二叉树怎么排的?:最佳左前缀法则 + +优化SQL的方法:减少索引的数量,联合索引 + +一个联合索引只生成一个b+树,对树的维护成本低 + +## 覆盖索引 + +覆盖索引不是索引,而是索引的一种优化方式。 + +从辅助索引中就可以得到查询的记录,而不需要查询聚集索引中的记录。 + +## 自适应HASH索引 + +如果5.7以上默认开启热点数据分析,自动建立hash索引 + +监控:热数据 索引, + +当 where子句中只有 等于 或者 in条件的时候会命中自建hash + +如果查询到 hash search少,non_hash search/s比较高,则可以关闭自适应hash。 \ No newline at end of file