mysql梳理笔记---mysql体系结构和不同存储引擎

整体体系

  • 客户端:php,java,C API,.net等:各种链接协议连接到mysql的客户端,完成文件处理,授权,安全等功能。每个链接都会有一个单独的线程,只能用到一个1cpu
  • mysql 服务层:select 等对外提供等语句。
  • 存储引擎层:innodb,myisam,XtraDB,CSV,Memory等. 存储引擎是针对于表等,而不是针对于库的。一个库中不同表可以使用不同存储引擎(不推荐)

MyISAM

  • 并发性与锁级别:表级锁,而不是行级锁。当对表中数据进行修改时,整个表都会锁住。对表中数据读取时,也是所有表加共享锁。读取和写入是互斥的。 读写混合操作的并发性不是太好。
  • 表损坏修复:check table tablename,repair table tablename;进行检查和恢复。(不支持事务。)
    create table myIsam(id int,c1 varchar(10)) engine=myisam;
    check table myIsam;
    repair table myIsam;

MyISAM特性:

  • MyISAM表支持的搜索引擎类型:支持全文索引,支持对text,blob等前缀索引。
  • MyISAM表支持压缩:如果表数据大切不会修改,可以压缩使用。(压缩后是只读)。

    命令行:myisampack

    myisampack -b -f myIsam.MYI

MyISAM限制:

  • 版本< MySQL5.0,默认单表最大4g:如存储大表,则要在建表等时候修改MAX_Rows和AVG_ROW_LENGTH
  • 版本> MySQL5.0,默认单表最大256TB

使用场景

  • 非事务型应用:非财务等类型
  • 只读类应用:可以压缩,对只读应用非常不错。大的数据报表非常合适
  • 空间类应用:在mysql5.7之前,唯一支持空间函数的存储引擎,如果要使用空间数据GPS等,并通过空间函数进行运算,只能使用myisam

Innodb

MySQL5.5及之后版本默认存储引擎

  • 使用表空间进行数据存储
  • 适合处理大量小事务,小事务会正常提交,影响回滚。
  • innodb_file_per_table决定存储在什么表空间;
    • ON:独立表空间, tablename.ibd
    • OFF:系统共享表空间:ibdataX

系统表空间和独立表空间如何选择:建议使用独立表空间(mysql5.6之后默认)。

  • 系统表空间无法简单的收缩文件大小。mysql5.6之前,innodb_file_per_table 默认是OFF,也就是存在系统表空间中。系统表空间会不断增长,当磁盘空间不足时, 删除无效数据或日期以缩小空间占用,但是系统表空间并不会缩小。所以只能把整个数据库表数据导出,删除innodb相关表空间后,重启mysql进行表空间重建,倒入数据。
  • 独立表空间可以通过optimize table 命令收缩系统文件
  • 系统表空间会产生IO瓶颈。由于只有一个文件,同时多个表数据刷新时,会顺序执行。
  • 独立表空间可以同时向多个文件刷新数据

innodb存储引擎的特性:

  • Innodb是一种事务性存储引擎
  • innodb支持行级锁:最大程度支持并发。是在存储引擎层实现的

随机浏览