存储引擎之-MyISAM(5.5版本之前默认)
1 2 3 4 5 6 |
-- 测试MyISAM存储引擎 CREATE TABLE test_myisam( a INT UNSIGNED, b VARCHAR(20), c CHAR(32) )ENGINE=MyISAM; |
在创建好之后,磁盘中会产生三个格式的文件
- .frm – 表结构文件
- .MYD – 存储数据的文件
- .MYI – 索引文件
可以在建表的时候指定数据文件和索引文件的存储位置,只有MyISM表支持(其他的如果写上是没有效果的),下面是指定存储的语法:
1 2 |
DATA DIRECTORY [=] 数据保存的绝对路径 INDEX DIRECTORY [=] 索引文件保存的绝对路径 |
注意:设置路径之后其实还是会先刚才一样在目录下面产生三个文件,只不过软链接到了指定的位置。
特点:
- MyISAM单表最大支持的数据量是2的64个次方的记录
- 每个表最多可以建立64个索引
- 如果是复合索引,每个符合索引最多包含16个列,索引的最大长度是1000B
- 支持三种存储格式:
- 定长(fixed静态):指字段中不包含VARCHAR / TEXT / BLOB,存储固定的存储模式,查找速度快,如果数据库崩溃了,可以使用myisamchk的命令行工具来修复记录。
- 动态(dynamic):字段中包含了varchar/text/blob就是定长的存储格式,处理数据要复杂一些,有一个行头来标定长度,经常更新会产生碎片,要使用myisam check来去掉碎片。
- 压缩(compressed):myisam pakc来创建
1 2 3 4 5 6 |
CREATE TABLE myisam_1( a char(30), id int )ENGINE=MyISAM; SHOW TABLES STATUS LIKE 'myisam_1'\G |
其中定长和动态不需要单独指定,在创建表的时候根据表的类型会自动的指定适配,比如char类型就是静态表,varchar就是动态表,也可以通过一个选项来强制的定义
1 2 3 4 |
CREATE TABLE myisam_3( a VARCHAR(30), id int )ENGINE=MyISAM ROW_FORMAT=FIXED; |
存储引擎之–InnoDB(5.5之后默认)
- 设计遵循ACID(支持事务,具有从服务崩溃中恢复的能力,能够最大限度的保护用户的数据)。
A – Atomiocity 原子性
C – Consistency 一致性
I – Isolation 隔离性
D – Durability 持久性
- 支持行级锁,可以退提升多用户并发时的读写性能
- 支持外键,保证数据的一致性和完整性
- InnoDB拥有自己独立的缓冲池,常用的数据和索引都在缓存中
- 对于INSERT、UPDATE、DELETE操作,InnoDB会使用一种change buffering的机制来自动优化,还可以提供一致性的读,并且还能够缓存变更的数据,减少磁盘的I/O,提高性能。
- 创建InnoDB之后会产生里两个文件:
.frm表结构文件
.ibd数据和索引存储在表空间中
- 在创建的时候最好每个表都指定一个主键,最好是配上AUTO_INCREAMENT,一般加在Id上或者经常查询的列作为主键。