数据库高级体系结构,存储引擎,优化sql前提条件判断

mysql体系结构


数据库高级体系结构,存储引擎,优化sql前提条件判断_第1张图片
数据库高级体系结构,存储引擎,优化sql前提条件判断_第2张图片
数据库高级体系结构,存储引擎,优化sql前提条件判断_第3张图片

mysql存储引擎


数据库高级体系结构,存储引擎,优化sql前提条件判断_第4张图片
查询引擎语句

show engines;

各种存储引擎对比:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第5张图片

INNODB


数据库高级体系结构,存储引擎,优化sql前提条件判断_第6张图片
外键约束:
在这里插入图片描述
存储方式:
在这里插入图片描述

MyISAM


在这里插入图片描述
不支持事物,不存储外键

文件存储方式
在这里插入图片描述

存储引擎选择


常用:
在这里插入图片描述
了解:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第7张图片

sql优化工具


sql优化步骤(原则首先要快速定位到问题sql)

1)查看sql执行频率
在这里插入图片描述
命令:显示当前session的统计参数的值

show status like 'Com________';

上面占位7个字符
数据库高级体系结构,存储引擎,优化sql前提条件判断_第8张图片
数据库高级体系结构,存储引擎,优化sql前提条件判断_第9张图片
全局的在status前面加个global
数据库高级体系结构,存储引擎,优化sql前提条件判断_第10张图片
那么我们只查innodb相关的表的CRUD影响的行数的命令:

show status like 'innodb_rows_%';

数据库高级体系结构,存储引擎,优化sql前提条件判断_第11张图片
那么怎么验证呢:
可以再执行一个sql语句再执行一下命令观察一下就能得出结论

以上作用:主要是用来这个判断当前数据库CURD操偶作中的哪个为主
2)定位低效率执行sql
两种方法:

在这里插入图片描述
数据库高级体系结构,存储引擎,优化sql前提条件判断_第12张图片
每列参数:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第13张图片
在这里插入图片描述

3)分析执行计划
我们经常使用的是explain另外两个了解即可
查询sql语句的执行计划:
列如:

select *from tb_itm where id = 1;

在这里插入图片描述
在这里插入图片描述

explain中每列具体代表的含义:
首先我们假设设计了这样一张表
数据库高级体系结构,存储引擎,优化sql前提条件判断_第14张图片
中间那个是关联表,用户和角色是多对多的关系,这点明白了继续下一步
创建角色表:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第15张图片

创建用户表:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第16张图片

创建用户角色表中间表:
数据库高级体系结构,存储引擎,优化sql前提条件判断_第17张图片
插入数据按照自己需要插入

环境准备好后继续

  • explain之id
    首先明白这个查询出来的id跟主键还有自增是没关系的
    id解释看上面表
    当然要是单表查询这id用处也不大主要是看查多表的情况,细节注意最好查的时候表换成别名
    id的情况有三种:
    1)id相同表示加载表的顺序从上到下的
    比如说多表等值连接查询情况
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第18张图片
    2)id不同id值越大优先级越高越先被执行
    比如说嵌套子查询情况
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第19张图片
    按照这逻辑推导出来即像剥洋葱那样从内往外执行

    3)有点麻烦,id有相同的也有不同的,id相同的可以认为是一组,从上往下执行,所有组中id越大越先被执行
    假设是这个sql语句:
    在这里插入图片描述
    单表查询又连接了一个子查询
    在这里插入图片描述
    那么推导出顺序先查子查询在和外表进行等值连接查询

    不用强记逻辑可以理解的和我们思维方式一样

  • explain之select_type
    常见取值:
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第20张图片
    自顶向下效率越来越慢
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第21张图片
    在这里插入图片描述
    标白的子查询是subquery,外层没标白的是primary
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第22张图片
    对应上面那表解释理解
    然后要注意那个table里面表示的就是下面一行的id和select_type

数据库高级体系结构,存储引擎,优化sql前提条件判断_第23张图片
这里两个单表查询求并集
需要注意了解一下

  • explain之table
    表示这行数据是哪张表的

  • explain之type
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第24张图片
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第25张图片
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第26张图片
    要求一条数据的话来个子查询就好

数据库高级体系结构,存储引擎,优化sql前提条件判断_第27张图片
通常这个是通过主键查询
当然还有特殊情况,原因username是唯一索引
数据库高级体系结构,存储引擎,优化sql前提条件判断_第28张图片
数据库高级体系结构,存储引擎,优化sql前提条件判断_第29张图片数据库高级体系结构,存储引擎,优化sql前提条件判断_第30张图片
在这里插入图片描述

  • expain之key
    在这里插入图片描述
    解释在上面的表也有
    在这里插入图片描述
    前面索引的时候要用短索引
  • explain之extra
    显示还没显示的信息
    数据库高级体系结构,存储引擎,优化sql前提条件判断_第31张图片
    如果出现了前两个就需要考虑性能的优化了
    在这里插入图片描述
    比如说这样就要考虑加索引了,或者向有索引的查询方式靠

show profile分析sql(了解)


在这里插入图片描述
数据库高级体系结构,存储引擎,优化sql前提条件判断_第32张图片
这个默认是关闭的需要开启使用set语句
这里的开启级别是session

set profiling = 1;

那么后面查到了这个query_id,再根据最开始那个体系结构图你会发现这个线程每个阶段消耗时间的情况
数据库高级体系结构,存储引擎,优化sql前提条件判断_第33张图片

数据库高级体系结构,存储引擎,优化sql前提条件判断_第34张图片
在这里插入图片描述
在这里插入图片描述

trace分析优化器执行计划(了解)


查询系统盘
在这里插入图片描述
解析select后的*号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(数据库高级体系结构,存储引擎,优化sql前提条件判断)