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的基础架构图

2.5W字,图文详解 "MySQL优化" 问题!-1
  左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQL的服务端),我们将Server在细分为sql层和存储引擎层。
  首先,需要建立客户端与服务器之间的连接。这里通过一个【连接器】,我们建立的客户端与服务器之间的连接,此时,你在客户端写的SQL语句,就可以发送到MySQL的服务了。(接下来要做的事儿肯定不是立即去分析呀!查询底层的数据呀!这样的话效率就太低下了。)
  接着,这个SQL语句将会被交到这个【查询缓存】中,如果可以查到,就直接响应回来给你;如果在查询缓存中没有查到,就需要接着往下走。
  然后,这个SQL语句将会被交到这个【分析器】中,这个分析器用于词法分析、语法分析,检查你写的SQL语句有没有单词拼写错误,语法书写错误。如果都没有错误,就需要接着往下走。
  再接着,这个SQL语句将会被交到这个【优化器】中,优化器如果觉得你的SQL写的太差了,它会帮你写一个性能高一些的等价SQL,去执行。如果优化器觉得你的SQL写的还行,就不会动你的SQL语句。这个优化器与我们下面需要讲解的“索引”有着千丝万缕的关系。
  再然后,优化器将最终确定好的SQL方案,交给了【执行器】,执行器通过执行引擎调用“存储引擎”。
  最后,“存储引擎”最终调用【文件系统】,从底层去查询出数据。
  当查询出数据以后,会返回给执行器。执行器一方面将结果写到查询缓存里面,当你下次再次查询的时候,就可以直接从查询缓存中获取到数据了。另一方面,直接将结果响应回客户端。

2)查询数据库的引擎
① show engines;

2.5W字,图文详解 "MySQL优化" 问题!-2

② show variables like “%storage_engine%”;

2.5W字,图文详解 "MySQL优化" 问题!-3

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;