<返回更多

针对mysql,数据库干货分享,值得收藏

2020-04-30    
加入收藏

逻辑架构

 

针对mysql,数据库干货分享,值得收藏

MySQL逻辑架构图

 

查询过程

针对mysql,数据库干货分享,值得收藏

查询过程时序图

存储引擎

 

针对mysql,数据库干货分享,值得收藏

支持的9种存储引擎

从上图我们可以查看出当前版本的MySQL 默认存储引擎是InnoDB, 其实在5.5版本之前,MyISAM是它的默认引擎,之后是InnoDB。我们项目用的是8.0.17 。

主流的引擎就两种:innodb和myisam

《MySQL高性能》上面有一句话这样写到:

不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。

一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。

MYSQL数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型

 

针对mysql,数据库干货分享,值得收藏

数值类型

 


 

 

针对mysql,数据库干货分享,值得收藏

日期类型

 

针对mysql,数据库干货分享,值得收藏

字符/字符串类型

索引失效场景

a.单列索引无法储null值,复合索引无法储全为null的值。

b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。

为什么索引列无法存储Null值?

①.索引是有序的。NULL值进入索引时,无法确定其应该放在哪里。(将索引列值进行建树,其中必然涉及到诸多的比较操作,null 值是不确定值无法比较,无法确定null出现在索引树的叶子节点位置。) 

②.如果需要把空值存入索引,方法有二:其一,把NULL值转为一个特定的值,在WHERE中检索时,用该特定值查找。其二,建立一个复合索引。例如 create index IDX on table(col1,1); 通过在复合索引中指定一个非空常量值,而使构成索引的列的组合中,不可能出现全空值。

1、id相同:按从上到下的顺序执行

2、id不同:按id从大到小执行

3、id部分不同:先执行id大的,id相同的,按从上到下的顺序执行

SIMPLE简单的查询,没有子查询,也没有union

PRIMAR主查询,有子查询的外边的查询

UNIONUNION中的第二个或者后边的select

DEPENDENT UNION 指子查询中的第二个或者后边的select

UNION RESULTUNION 的整个查询

SUBQUERY子查询中的第一个SELECT

DEPENDENT SUBQUERY子查询中的第一个SELECT,取决于外面的查询

DERIVED派生表的SELECT, FROM子句的子查询

mysql在表中找到需要的行的方式,也叫访问类型(好的sql至少达到range级别,最好能达到ref)

all全表扫描

index全索引扫描

range给定索引范围进行扫描

ref表示连接,即扫描条件是某个常量,或者列

eq_ref类似于ref,区别是所使用的索引是唯一索引不存在相同的值

const,system 在查询时mysql的优化,where语句后被优化为一个常量进行查询

null MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成

 

针对mysql,数据库干货分享,值得收藏

extra子项

MYSQL优化方案

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>