MySQL存储引擎总结
因为支持多存储引擎是mysql区别于其它主流关系型数据库的一大特色,今天有空就看了下关于讲解存储引擎的视频,因此将其内容以及网上搜到的内容转化为自己的认识,做一个简单的总结,用以巩固和记录;
首先一句话总结几个主要的存储引擎:
- Innodb,目前默认的引擎,就证明了它成熟与稳定;
- csv:以文本形式存储数据的存储引擎
- archive:以zlib对表的数据进行压缩的文件
- memory:只保存结构,数据保存在内存的存储引擎
- federated:支持远程查询的存储引擎,类似于dblink
结合以上特点我们大概能了解每种引擎的特点和使用场景,当然只是个人的浅薄认识,但是比起认真准确的总结,这样做在未来更容易与实际应用相结合,在需要的时候再回头温故所需的存储引擎更加简单粗暴且有效。
为什么没有myisam存储引擎呢?
因为作为曾经默认的存储引擎,如今已被innodb替代,在实际的应用中自然不如innodb为主,在特殊场景使用其他更具有针对性的存储引擎有效。
关于存储引擎的选择,通过本人一天的学习,总结不过一句话,用默认的innodb就对了;
但是今天学习的意义又在哪里了,显然,以前人的经验,一个库中混合使用存储引擎是绝对不可取的,但是当一个大型的系统存在性能瓶颈是,我们采用分库处理时多存储引擎的优势就发挥出来了;
例如我们可以将需要数据同步需要大量使用中间表的功能分离到memory的存储引擎中,因为他的数据直接保存在内存中,读写的速度必然足够的快,
对于大数据量只读和写入的功能,如历史数据,我们可以使用压缩数据的Archive存储引擎。。
查看数据库存储引擎概况的命令:show engines;
当然对于目前的开发应用只需要了解Innodb存储引擎就足够了,它虽然不是最高效的,但是时最健壮,成熟的,了解innodb的特点与原理,对于我们对MySQL数据库的查询优化时非常必要的
对Innodb的特点做以下总结;
- 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
- 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
- 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
- 外键约束。MySQL支持外键的存储引擎只有InnoDB。
- 支持自动增加列AUTO_INCREMENT属性。
- 支持行级锁。
- 具有非常高效的缓存特性:能缓存索引,也能缓存数据。
- 支持分区,表空间,类似oracle数据库。
innodb存储使用表空间作为数据存储,查看它使用的是系统表空间还是独立表空间:show variables like 'INNODB_file_per_table';
innodb文件格式:表结构(.frm),数据文件(.ibd)
表空间的结构结构层次由大到小依次为:表空间(tablespace),段(segment),区(extend),页(page),行(row)
段:常见的segment有数据段、索引段、回滚段等;
区:每个区大小固定为1MB,为保证区中page的连续性通常InnoDB会一次从磁盘中申请4-5个区。在默认page的大小为16KB的情况下,一个区则由64个连续的page。
** InnoDB 1.2.x版本增加参数innodb_page_size参数指定page的大小,但区的大小不会改变。 当启用了innodb_file_per_table参数后创建的表大小默认是96KB,而不是立即是1MB,是由于每个段开始先使用32个页大小的fragment page(碎片页)来存放数据,对于一些小表可节省磁盘空间。
页:每个page默认大小为16K,
** InnoDB 1.2.x版本增加参数innodb_page_size参数指定page的大小,设置完成后表中所有page大小都固定,除非重新dump再imports数据,否则不能再修改page大小。
以上仅为个人片面的认识,如有不对的地方或者更好的见解希望大家多多指教。
扩展:死锁与阻塞。

浙公网安备 33010602011771号