1、索引的实现
2、mysql体系结构
连接池、
服务和工具层、
sqlInterface、
parser、
optimizer、
caches
indexes:
pluggable storage engines 存储引擎:MyISAM InnoDB federated archive merge memory cluster example
file system
logs and files binary ,redo ,undo
3、索引的定义
为了加速对表中数据的检索而创建的一种分散存储的数据结构。
索引 —— 表数据(磁盘地址 数据)
4、使用索引的好处
索引能极大的减少存储引擎需要扫描的数据量;
可以将随机IO编程顺序IO
索引可以在我们进行分组、排序等操作时,避免使用临时表
5、mysql支持的索引
一、数据结构
1、B+树索引(O(log(n)))
2、hash索引
a、仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询
b、其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引
c 只有Memory存储引擎显示支持hash索引
3、FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)
4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)
5、数据结构为什么使用B+Tree?
- 树的概览
1、二叉树查找 Binary Tree Search
2、平衡二叉树 Balanced binary search tree
相对平衡的树
缺点:·太深 了:数据处的深度决定了索引的IO操作,IO操作耗时大
太小了:每一个磁盘块(节点/页)保存的数据量太小了,没有很好 的利用操作磁盘IO的数据交换特性,也没有很利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作
3、多路平衡二叉树B-tree 绝对平衡树
4、加强版多路平衡查找树- B+Tree mysql的B+Tree
6、MySql B+Tree索引体现形式
1、Myisam db.myi(索引库) db.myd(数据库)
2、Innodb 以主键为索引来组织数据的存储
聚集索引:数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同 db.ibd
分为:主键索引 , 辅助索引
Myisam和Innodb索引查找对比
7、索引特性
a、离散型:离散型越高,选择性就越好
b、最左匹配原则:对索引中关键字进行计算(对比),一定是从左往右依次进行,且不可跳过
c、联合索引:
单列索引 节点中关键词【name】
联合索引 节点中关键词 【name,phoneNum】
单列索引是特殊的联合索引
联合索引列选择原则
1、经常用的列优先【最左匹配原则】
2、选择性(离散度)高的列优先【离散度高原则】
3、宽度小的列优先【最少空间原则】
d、覆盖索引
如果查询列可通过索引节点中的关键字直接返回,则该索引称之为覆盖索引。