1.体系结构
mysql体系结构图
Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的(SQL Interface、Parser、Optimizer、Caches&Buffers、Pluggable Storage Engines)
(1) Connectors指的是不同语言中与SQL的交互
(2)Management & Utilities: 系统管理和控制工具,例如备份恢复、Mysql复制、集群等
(3)Connection Pool: 连接池:管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求
(4)SQL Interface: SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
(5)Parser: 解析器,SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本, 主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
(6)Optimizer: 查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
(7) Cache和Buffer(高速缓存区): 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
(8)Engine :存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。
默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。
InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。
Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
2.索引
是什么:加速对表中的数据进行检索的一种分散存储的数据结构。
why to user:
索引能极大的减少存储引擎需要扫描的数据量
索引可以把随机IO变成顺序IO
索引可以帮助我们在进行分组、排序等操作时,避免使用临时表
3.底层结构--使用B+树
二叉查找树
平衡二叉查找树
why not use 二叉树
1. 二叉树存储数据过深,决定IO次数过多
2. 每个磁盘页包的数据太小,不能很好利用磁盘IO,以及磁盘IO的预读能力(空间局部性)
多路平衡查找树
B+树
B+树与B树的区别:
1,B+节点关键字搜索采用闭合区间
2,B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
3,B+关键字对应的数据保存在叶子节点中
4,B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系
B+树的优点:
B+树是B-树的变种(PLUS版)多路绝对平衡查找树,他拥有B-树的优势
B+树扫库、表能力更强
B+树的磁盘读写能力更强
B+树的排序能力更强
B+树的查询效率更加稳定(仁者见仁、智者见智)
4.索引表现形式
innodb和myisam的索引比较,左边为innodb5.索引知识补充
索引特点:
离散性越高选择性越好
最左匹配原则
联合索引
单列索引 [关键字a],
联合索引 [关键字a,关键字b],单列索引是特殊的联合索引
联合索引列选择原则
1,经常用的列优先 【最左匹配原则】
2,选择性(离散度)高的列优先【离散度高原则】
3,宽度小的列优先【最少空间原则】
如果查询列可通过索引节点中的关键字直接返回,则该索引称之为 覆盖索引。
6.总结
索引列的数据长度能少则少。--》B+树的数据结构,索引长度越短,相同存储能够容纳的索引越多
索引一定不是越多越好,越全越好,一定是建合适的。--》维护索引需要付出代价,索引占用存储
匹配列前缀可用到索引 like 9999%,like %9999%、like %9999用不到索引; Where 条件中 not in 和 <>操作无法使用索引; 匹配范围值,order by 也可用到索引;--》索引匹配原则
多用指定列查询,只返回自己想到的数据列,少用select *;--》覆盖索引
联合索引中如果不是按照索引最左列开始查找,无法使用索引;
联合索引中精确匹配最左前列并范围匹配另外一列可以用到索引;
联合索引中如果查询中有某个列的范围查询,则其右边的所有列都无法使用索引;--》联合索引符合单列索引的匹配规则
网友评论