查看mysql支持的存储引擎列表
mysql> show engines\G;
*************************** 1. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
..........
..........
Innodb(事务安全型的存储引擎,更加注重数据的完整性和安全性)
\>= 5.5 默认的存储引擎,mysql推荐使用的存储引擎
特点:提供事务,行级锁定,外键约束支持的存储引擎
存储格式
数据,索引集中存储,都存储与同一个表空间文件
中
数据=记录行
索引=检索机制,也需要占用一定空间
.frm文件,表结构文件
innodb_xxx_.frm
默认情况下,mysql中所有的数据行,全部存储在innodb表的表空间文件中
innode,表空间内容(数据和索引)
通过设置临时设置innodb_file_per_table = 1设置为,每张表都为一个innodb表空间文件
\>= set global innodb_file_per_table = 1
设置完成后,新建一张表,生成如下两个文件
innodb_1.frm 单表结构文件
innodb_1.ibd 单表空间文件
数据按照主键顺序存储
在一张主键ID自增的表中,随意设置主键列值,查询时得出的结果是经过mysql排序的
也就是说,mysql在插入的时候会做排序工作,把表中数据先主键排序后再插入,效率低
特定功能
下面两个功能都是维数数据完整性
事务:
外键约束:php开发人员,需要自己去实现外键约束功能,例如,删除一个分类,php开发人员自己先去查询,该分类下是否存在子分类功能
并发处理
innodb擅长处理并发,因为如下功能支持
行级锁定:row-level locking , 某些情况下,使用行级锁定,提高并发性,也支持表级锁定,innodb自己可以操作,无需人为参与
多版本并发控制:mvcc,效果几乎
达到无阻塞读操作,写操作的时候,写副本,原始版本供其他客户端读
锁
读锁:读操作时增加锁,叫共享锁,S-lock特征是阻塞其他客户端的写操作,不阻塞读操作
写锁:写操作时增加锁,叫独占锁或排他锁,X-lock特征是阻塞其他客户端的读、写操作锁定粒度(范围)
行级:提升并发性,锁定开销大
表级:不利于并发性,锁定开销小
myisam
\<= 5.5 mysql默认的存储引擎
isam:Indexed Sequential Access Method(索引顺序存取方法)的缩写 ,是一种文件系统
特点:擅长处理些,高速读与写。
存储格式
数据、索引、结构分别存储于不同的文件中
myisam_xxx.frm 结构
myisam_xxx.MYD 数据
myisam_xxx.MYI 索引
数据的存储顺序为,按插入顺序排列
特定功能
全文索引支持。(>= 5.6 innodb支持)
数据压缩存储。.MYD文件的压缩存储。
压缩前
压缩:使用工具myisampack完成压缩功能,在bin目中
压缩后(由于我的win平台的mysql的bin目录没有这个工具,暂先文字描述),压缩一半以上,MYD会被压缩,MYI不会被压缩,节省磁盘空间,减少I/O开销
注意,压缩后,表只能读,不能写,要写的话,需要重新恢复。
如果需要更新,需要解压后更新,再压缩(重新索引)
利用工具解压缩:myisamchk -unpack 表名
再执行刷新表:flush table 表名
并发性
只支持表级锁定
支持并发插入,写操作中的插入操作,不会阻塞读操作
myisam
innodb:数据完整性,并发性处理,擅长更新,删除
myisam:高速查询及插入。擅长插入,查询
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。