2.5W字,图文详解 "MySQL优化" 问题!
目录
1、MySQL的基本架构
1)MySQL的基础架构图
2)查询数据库的引擎
3)指定数据库对象的存储引擎
2、SQL优化
1)为什么需要进行SQL优化?
2)mysql的编写过程和解析过程
3)SQL优化—主要就是优化索引
4)索引的弊端
5)索引的优势
6)B+树图示说明
3、索引的分类与创建
1)索引分类
2)创建索引的两种方式
3)索引删除和索引查询
4、SQL性能问题的探索
1)查看执行计划
2)“执行计划”中需要知道的几个“关键字”
5、explain执行计划常用关键字详解
1)id关键字的使用说明
2)select_type关键字的使用说明:查询类型
3)type关键字的使用说明:索引类型
4)possible_keys和key
5)key_len
6)ref
7)rows
8)extra
6、优化示例
1)引入案例
2)单表优化
3)两表优化
4)三表优化
7、避免索引失效的一些原则
8、一些其他的优化方法
1)exists和in的优化
2)order by优化
1、MySQL的基本架构
1)MySQL的基础架构图
左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQL的服务端),我们将Server在细分为sql层和存储引擎层。
首先,需要建立客户端与服务器之间的连接。这里通过一个【连接器】,我们建立的客户端与服务器之间的连接,此时,你在客户端写的SQL语句,就可以发送到MySQL的服务了。(接下来要做的事儿肯定不是立即去分析呀!查询底层的数据呀!这样的话效率就太低下了。)
接着,这个SQL语句将会被交到这个【查询缓存】中,如果可以查到,就直接响应回来给你;如果在查询缓存中没有查到,就需要接着往下走。
然后,这个SQL语句将会被交到这个【分析器】中,这个分析器用于词法分析、语法分析,检查你写的SQL语句有没有单词拼写错误,语法书写错误。如果都没有错误,就需要接着往下走。
再接着,这个SQL语句将会被交到这个【优化器】中,优化器如果觉得你的SQL写的太差了,它会帮你写一个性能高一些的等价SQL,去执行。如果优化器觉得你的SQL写的还行,就不会动你的SQL语句。这个优化器与我们下面需要讲解的“索引”有着千丝万缕的关系。
再然后,优化器将最终确定好的SQL方案,交给了【执行器】,执行器通过执行引擎调用“存储引擎”。
最后,“存储引擎”最终调用【文件系统】,从底层去查询出数据。
当查询出数据以后,会返回给执行器。执行器一方面将结果写到查询缓存里面,当你下次再次查询的时候,就可以直接从查询缓存中获取到数据了。另一方面,直接将结果响应回客户端。
2)查询数据库的引擎
① show engines;
② show variables like “%storage_engine%”;
3)指定数据库对象的存储引擎
create table tb(
id int(4) auto_increment,
name varchar(5),
dept varchar(5),
primary key(id)
) engine=myISAM auto_increment=1 default charset=utf8;