1.存储引擎的概念
当一个大型的系统存在性能瓶颈是,我们采用分库处理时多存储引擎的优势就发挥出来了。
2.查看存储引擎
查询所有的引擎:
show engines;
当前使用的引擎:
show variables like '%storage_engine%'
3.MYISAM与InnoDB的区别
二:详细说明
1.myIsam
表级锁定
读写相互阻塞,写入不能读,读时不能写
只缓存索引
不支持外键约束
不支持聚簇索引
读取数据较快,占用资源较少
不支持MVCC(多版本并发控制机制)高并发
崩溃恢复性较差
MySQL5.5.5前默认的数据库引擎
使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件。
(1)frm文件:存储表的定义数据
(2)MYD文件:存放表具体记录的数据
(3)MYI文件:存储索引
frm和MYI可以存放在不同的目录下。MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。
2.innodb
对Innodb的特点做以下总结;
更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
外键约束。MySQL支持外键的存储引擎只有InnoDB。
支持自动增加列AUTO_INCREMENT属性。
支持行级锁。
具有非常高效的缓存特性:能缓存索引,也能缓存数据。
支持分区,表空间,类似oracle数据库。
读写阻塞与事务隔离级别相关
支持聚簇索引
支持MVCC高并发
从MySQL5.5后支持全文索引
innodb_file_per_table on:表示独立表空间,OFF:表示系统表空间。5.6之前是系统表空间,之后为独立表空间。
3.memory
将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。文件是frm。
(1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;
(2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;
(3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;
(4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;
(5)默认使用hash索引。
(6)如果一个内部表很大,会转化为磁盘表。
4.csc
数据以文本方式存储,表的字段不能为空,不能有主键。
.frm , .csv数据的内容, .csm存储表的元数据 。
使用文本编辑器可以直接编辑.csv数据,然后保存,在数据库里面执行flush tables;
要在最后一行数据回车一下,要不然最后一条数据不展示。
特点:
以CSV格式进行数据存储,所有列的字段都不能为null,不支持索引,可以对数据文件在线编辑。
5.archive
以zlib对表数据进行压缩,磁盘I/O更少,数据存储在.ARZ。
.frm , .ARZ数据的内容。
特点:
只支持insert和select操作,只允许在自增ID列上加索引。
使用场景:
日志和数据采集应用
6.Federated
访问远程的数据库表,本地只保存数据库结构和连接信息,数据保存在远程的服务器中。在本地只保存.frm
默认不是开启的引擎,在my.ini 增加 federated=1,重启。
只能用命令创建。create table ‘aaa’(里面的字段,要和连接的服务器一样) engine=federated connection='mysql://用户名:密码@地址:IP/数据库名/表名'