此文章为Myth_Ghost原创作品。禁止转载!!!
MyISAM支持索引类型(系统表)
MyISAM表支持数据压缩
如果数据写入表后,不需要更改,可以进行压缩操作。读取的时候可以逐行解压缩,不需要整个表解压。
myisampack -b -f xxxxx.MYI
压缩后不能进入写操作,只能读操作。
限制:
MySQL 5.0之前默认表大小为4G
修改大表需要修改MAX_Rows和AVG_ROW_LENGTH。重新建表。
适用场景:
非事务型应用
数据仓库、报表
只读类应用
共享锁之间不会造成阻塞
空间类应用
支持空间函数
MySQL_Innodb优化
Innodb支持索引类型(支持在线热备)
Innodb使用表空间进行 数据存储
innodb_file_per_table
修改命令:
set global innodb_file_per_table = off;
on:独立表空间: tablename.ibd 为每一个表创建独立的表空间
1.optimize table
2.适合频繁写入
off:系统表空间: ibdataX
1.磁盘碎片
系统表空间不断增长,删除后不会释放空间。热备份方式:把所有数据库中Innodb表导出后,删除innodb相关的表空间文件后,再重启mysql服务器,进行表结构的重建,导入数据。
2.不适合频繁写入
表转移的步骤
1.使用mysqldump导出
2.停止mysql服务,修改参数,删除innodb
3.重启Mysql服务,重建innodb系统表空间
4.重新导入数据
锁的类型
共享锁(读锁)相互不会被阻塞
独占锁(写锁)
锁的粒度
表级锁 MySQL服务器实现
行级锁 InnoDB实现
阻塞和死锁
阻塞
死锁 少量死锁系统可以自动处理
常用存储引擎
csv 文件系统存储
数据以文本方式存储在文件中
特点:
- 以CSV格式进行数据存储
- 所有列必须不为NULL
- 不支持索引
- 不适合大表,不适合在线处理
- 可以对数据文件直接编辑
- 保存文本内容
适用场景:
- 适合作为数据交换的中间表
Archive存储引擎
特点:
- 以zilib对表数据进行压缩,磁盘I/O更少,占用空间小
- 数据存储在ARZ为后缀的文件中
- 只支持insert和select操作
- 只允许在自增ID列增加索引
适用场景:
- 日志和数据采集类应用
Memory存储引擎
特点:
- 也称为HEAP存储引擎,所以数据保存在内存中。表结构在硬盘中,数据(索引和数据)在内存中。
- 支持HASH索引(适合等值查找)和BTree索引(适合范围查找)
- 所有字段固定长度 varchar(10) = char(10)
- 不支持BLOG和TEXT等大字段类型
- 表级锁
- 表的最大大小由max_heap_table_size参数决定。默认16MB,需要先设定
易混淆概念:
- Memory存储引擎表
- 临时表(只对当前Session表可见)
- 系统使用临时表(内部临时表)
- 超过限制使用MyISAM临时表
- 未超过限制使用Memory表
- create temporary table 建立的临时表
- 系统使用临时表(内部临时表)
适用场景:(主Memory从Innodb数据库搭配使用时,主数据库重启,从数据库也会被重建。)
- 用于查找或者是映射表,例如邮编地区的对应表
- 用于保存数据分析中产生的中间表
- 用于缓存周期性聚合数据的结果表
Federated存储引擎(默认禁止)
特点:
- 提供了访问远程MySQL服务器上表的方法
- 本地不存储数据,数据全部放到远程服务器上
- 本地需要保存表结构和远程服务器的连接信息
适用场景:
- 偶尔的统计分析及手工查询