[数据库] MySql知识点总结

匿名 (未验证) 提交于 2019-12-02 22:06:11

MySQL的总体架构如下图所示




包括数据库连接器、连接池、SQL接口、解析器、优化器、缓存、存储引擎的等。其中常用的存储引擎为Innodb和MyISAM。Innodb有如下特点:

  • 使用Table Space的方式进行数据存储,表现为/var/lib/mysql/ibdata1文件和/var/lib/mysql/ib_logfile0文件;
  • 支持事物、外键约束等数据库特性;
  • 支持行级锁(Row level lock),读写性能都非常优秀;
  • 能够承载大数据量的存储和访问;
  • 拥有自己独立的缓冲池,能够缓存数据和索引
  • 在关闭自动提交的情况下,与MyISAM引擎的速度差异不大;

MyISAM存储引擎具有如下特点:

  • 数据存储方式简单,使用B+ Tree进行索引;
  • 使用三个文件定义一个表: .MYI .MYD .frm;
  • 少碎片、支持大文件、能够进行索引压缩;
  • 二进制层次的文件可以移植(Linux->Windows);
  • 访问速度飞快,是所有MySQL文件引擎中速度最快的;
  • 不支持一些数据库特性,比如事物、外键约束等;
  • 表级别锁(Table level lock),性能稍差,更适合读多的操作;
  • 表数据容量有限,一般建议单表数据量介于50W~200W之间;
  • 增删改查操作完后要使用myisamchk检查优化表;

Innodb的逻辑存储结构如下所示:




逻辑上所有数据都存放在一个表空间中(TableSpace);表空间管理的单元是段(Segment),分为数据段(B+ Tree的叶子节点)、索引段和回滚段(B+ Tree的非叶子节点)等;每个段内有若干个区(Extent);每个区内有若干页(Page);对于数据段来说每一个页内存储了数据库记录。

  • innodb_file_per_table参数值为off的情况下,Innodb会将所有数据都存放到到一个共享的表空间内(物理上表现为所有数据都存放到共享的ibdata文件中,如/var/lib/mysql/ibdata1文件)。
  • 参数值为on的情况下innodb会为每个表都建立一个独立的表空间,表的数据、索引和插入缓冲都是放在该独立的表空间内,而其他类型的数据,如undo信息、系统事物信息、二次写缓存等还是放在原来的共享表空间内(ibdata文件),默认情况下会在/var/lib/mysql/数据库名/目录下生成表明.frm(表结构文件)和表名.ibd(表数据文件)两个文件用于存放数据、索引和插入缓冲。
  • 常见的Segment有数据段、索引段和回滚段,每一个段对应B+ Tree中的一个节点,其中数据段为B+ Tree的叶节点(leaf node segment),索引段为B+ tree的非叶节点(none-leaf node segment);
  • 段的管理有引擎本身完成;
  • 区是由连续的64个页组成;
  • 每个页大小为16k;
  • 即每个区大小为(64*16k)=1MB;
  • 对于大的数据段,MySQL每次最多可以申请4个区,以保证数据的顺序性能;

ҳ(page)

  • Innodb的页也称为块(Block);
  • 页是Innodb磁盘管理的最小单位;
  • Innodb每个页的默认大小是16KB;
  • 可以通过参数innodb_page_size将页的大小设置为 4k/8k/16k;
  • 每个页里面存储的是行信息;
转载请标明出处:[数据库] MySql知识点总结
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!