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

逻辑架构 

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

文章插图
MySQL逻辑架构图
 
  • MySQL逻辑架构整体分为三层,最上层为客户层,
  • 并非MySQL所独有,诸如,连接处理、授权认证、
  • 安全等功能均在这一层处理 。
  • MySQL大多数核心服务均在中间这一层,包括查
  • 询解析、分析、优化、缓存、内置函数(时间、数学、
  • 加密等),所有的跨存储引擎的功能也在这一层实现:
  • 存储过程、触发器、视图等 。
  • 最下层为存储引擎,其负责MySQL中的数据存储
  • 和提取,中间的服务层通过API与存储引擎通信,这
  • 些API接口屏蔽了不同存储引擎的差异 。
查询过程
针对mysql,数据库干货分享,值得收藏

文章插图
查询过程时序图
存储引擎 
针对mysql,数据库干货分享,值得收藏

文章插图
支持的9种存储引擎
从上图我们可以查看出当前版本的MySQL 默认存储引擎是InnoDB, 其实在5.5版本之前,MyISAM是它的默认引擎,之后是InnoDB 。我们项目用的是8.0.17。
主流的引擎就两种:innodb和myisam
  • MyISAM和InnoDB区别
  • MyISAM不支持事务,而InnoDB支持 。
  • Myisam可以没有主键,InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键)
  • 而 MyISAM表不支持外键,InnoDB支持
  • MyISAM锁的粒度是表级,而InnoDB支持行(默认),表级锁 。
  • (InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上 。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁)
  • MyISAM支持全文类型索引,而InnoDB不支持全文索引 。(mysql 5.7后innodb支持全文索引)
  • InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描 。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件)
  • 清空整个表时,InnoDB是一行一行的删除,效率非常慢 。MyISAM则会重建表 。
  • Innodb存储文件有frm、ibd,而Myisam是frm、myd(my data)、myi(my index)
  • Innodb:frm是表定义文件,ibd是数据文件
  • Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM 。当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择innodb表 。当你的数据库主要以查询为主,相比较而言更新和写 入比较少,并且业务方面数据完整性要求不那么严格,就选择myisam表 。
《MySQL高性能》上面有一句话这样写到:
不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的 。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用 。
一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择 。但是一般情况下,我们都是需要考虑到这些问题的 。
MYSQL数据类型MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型
  • 数值类型
 
针对mysql,数据库干货分享,值得收藏

文章插图
数值类型
注:
  • M 的值跟 int(M) 所占多少存储空间并无任何关系
  • TINYINT(M), M默认为4;
  • SMALLINT(M), M默认为6;
  • MEDIUMINT(M), M默认为9;
  • INT(M),M默认为11,其实如果我们明确了无符号,那么可以设置为10,因为少了符号位;
  • BIGINT(M),M默认为20.
  • M表示最大显示宽度,不是用来限制INT列内保存值的范围的 。建表若设置了zerofill(0填充), 会在数字前面补充0. int(M)的最大值和最小值与UNSIGNED有关
【针对mysql,数据库干货分享,值得收藏】 


    推荐阅读