>[danger] 一切數據皆文件。
[TOC]
## 一、B樹和B+樹的區別
### 1、樹的深度不同
B樹的每個節點存儲了key和data,key是一條數據記錄的鍵值 ,是唯一的,data存儲的是數據記錄除key以外的數據。而B+樹只在葉子節點存儲data數據,這樣非葉子節點就能存儲更多的key。所以B+樹相較于B樹來說更加的矮胖,因為索引樹很大不能一次IO讀取進內存,樹的深度越淺,查找數據時IO的次數就越少,效率就更快。

### 2、葉子節點有序
B+樹的每個葉子節點的指針指向相鄰的葉子節點,構成一個**有序鏈表**,可以按照關鍵碼排序的次序遍歷全部記錄。由于數據順序排列并且相連,所以便于區間查找和搜索。而B樹葉子節點指針為null,則需要進行每一層的遞歸遍歷。相鄰的元素可能在內存中不相鄰,所以緩存命中性沒有B+樹好。

## 二、B+樹在不同存儲引擎中的區別
### Innodb
- 在**Innodb**存儲引擎下,數據存放在兩個文件中,frm文件是存放表結構數據,.ibd存放的數據和索引。Innodb中用到的索引是**聚集索引**,即索引(B+樹)和數據存放在一起。

### MyISAM
- **MyISAM**中則.frm是存放表結構數據,MYD是表數據,MYI是存放索引。其索引類型為**非聚集索引**,數據查找時先從索引文件中找到數據的物理地址;再根據物理地址直接取數。

聚集索引的優點:
1、非葉子節點不存儲data,只存儲索引(指針和鍵值)
2、葉子節點不存儲指針
3、順序訪問指針,提高區間訪問的性能。
參考資料:https://blog.csdn.net/weixin_43256529/article/details/111730659
- 前言
- 第一部分 計算機網絡與操作系統
- 大量的 TIME_WAIT 狀態 TCP 連接,對業務有什么影響?怎么處理?
- 性能占用
- 第二部分 Java基礎
- 2-1 JVM
- JVM整體結構
- 方法區
- JVM的生命周期
- 堆對象結構
- 垃圾回收
- 調優案例
- 類加載機制
- 執行引擎
- 類文件結構
- 2-2 多線程
- 線程狀態
- 鎖與阻塞
- 悲觀鎖與樂觀鎖
- 阻塞隊列
- ConcurrentHashMap
- 線程池
- 線程框架
- 徹底搞懂AQS
- 2-3 Spring框架基礎
- Spring注解
- Spring IoC 和 AOP 的理解
- Spring工作原理
- 2-4 集合框架
- 死磕HashMap
- 第三部分 高級編程
- Socket與NIO
- 緩沖區
- Bybuffer
- BIO、NIO、AIO
- Netty的工作原理
- Netty高性能原因
- Rabbitmq
- mq消息可靠性是怎么保障的?
- 認證授權
- 第四部分 數據存儲
- 第1章 mysql篇
- MySQL主從一致性
- Mysql的數據組織方式
- Mysql性能優化
- 數據庫中的樂觀鎖與悲觀鎖
- 深度分頁
- 從一條SQL語句看Mysql的工作流程
- 第2章 Redis
- Redis緩存
- redis key過期策略
- 數據持久化
- 基于Redis分布式鎖的實現
- Redis高可用
- 第3章 Elasticsearch
- 全文查詢為什么快
- battle with mysql
- 第五部分 數據結構與算法
- 常見算法題
- 基于數組實現的一個隊列
- 第六部分 真實面試案例
- 初級開發面試材料
- 答案部分
- 現場編碼
- 第七部分 面試官角度
- 第八部分 計算機基礎
- 第九部分 微服務
- OpenFeign工作原理