Quick View
关联知识库:Quick View
Quick View
- MySQL
- PgSQL
- VS
- 分布式DB
- Future,语义向量支持
1. MySQL
MySQL索引
大事件:2010年,MySQL 5.5(Oracle发布)使用InnoDB作为默认的存储引擎
发展历史
- 2001年,InnoDB(From Innobase Oy Company)作为第三方存储引擎集成到MySQL
- 2006年,Oracle收购Innobase
- 2008年,Sun收购MySQL
- 2009年,Oracle收购Sun
- 2010年,MySQL 5.5(Oracle发布)使用InnoDB作为默认的存储引擎
- 2013年,MySQL 发布5.6
- 2015年,MySQL发布5.7,截止到2025年8月,MySQL官方文档支持的最旧一个版本
至此,MySQL的初期发展历史告一段落,世界继续前行...
# MySQL索引结构发展历史:从B树到B+树的演进之路.md
MySQL索引发展历史:二叉树 to B树 to B+树 to B+树查询渐进式优化
- B树多路平衡:降低树高度,减少IO
- B+树仅叶子节点存储数据(叶子节点也可存索引):进一步降低树高度,叶子节点使用双向链表链接:范围查询友好
索引基本盘
-
聚簇索引和非聚簇索引的工作方式
- 聚簇索引:索引和数据一起存放在B+树的叶子节点上。通过主键查询最终读到叶子节点,拿到数据。
- 非聚簇索引:由索引和聚簇索引构成,先通过索引找到聚簇索引的地址,例如主键,最后执行聚簇索引的查询(回表)拿到数据。
- 覆盖索引(策略?)对于非聚簇索引的查询优化:通过宽索引策略,将需要的数据放在索引中,避免回表(再进行一次聚簇索引的查询)。
-
非聚簇索引的子分类
- 唯一索引(带唯一约束的非聚簇索引):除加速外还有字段值不能重复(邮箱,手机号等)的数据约束
- 普通索引(不带唯一约束的非聚簇索引):仅加速
- 单列索引
- 多列/复合/联合索引:保持索引命中需将查询字段保持和索引相同的连续性。(最左前缀原则?)
- 覆盖策略(索引):避免回表。
B+树查询渐进式优化
-
自适应哈希索引(AHI):
- v5.5引入。“MySQL自带缓存”,识别连续访问,自动(自适应)创建哈希索引,加速后续访问。
- MySQL8.0默认开启,但仍需DBA考虑维护成本和收益之间的权衡。核心参数:AHI锁争用和内存使用情况。判断进行分区数的增加或者直接关闭AHI。
-
索引条件下推(v5.6):通过过滤(应用所有查询条件到存储引擎)避免多条件查询的无效回表。
-
MySQL 8.0
- 不可见索引:索引的逻辑删除,安全,可逆的“软删除”方案。
- 降序索引:版本前通过ASC升序索引的反向扫描实现降序,当前版本原生支持,效率更高。
MySQL性能优化
思路:结合业务需求,对以下方面进行考量
- 索引:设计符合业务需求且有助于性能提升的索引。
- 查询:符合业务需求且达到较高的索引命中率,避免慢查询。
- 服务器配置
- InnoDb缓冲池(buffer_pool), 建议值:物理内存的70%-80%,减少磁盘IO
- 线程池优化
- 持续的性能监控
- 慢日志
- CPU,内存监控等
TODO 可展开
InnoDB quick view
️ InnoDB存储引擎深度技术报告:架构原理与性能优化实践.md
- 广泛使用,生态强大
- MVCC和事务支持
- 行锁粒度和高并发
- 性能优化buffer_pool
2. PgSQL
3. VS
4. 分布式DB
# 分布式关系型数据库解决方案深度解析.md
数据库主键技术选型深度分析:UUID vs 自增ID的单机与分布式选择.md
- 读写分离
- 分库分表
- 存储计算分离,ES

浙公网安备 33010602011771号