MySQL存储引擎总结

  因为支持多存储引擎是mysql区别于其它主流关系型数据库的一大特色,今天有空就看了下关于讲解存储引擎的视频,因此将其内容以及网上搜到的内容转化为自己的认识,做一个简单的总结,用以巩固和记录;

  首先一句话总结几个主要的存储引擎

    1. Innodb,目前默认的引擎,就证明了它成熟与稳定;
    2. csv:以文本形式存储数据的存储引擎
    3. archive:以zlib对表的数据进行压缩的文件
    4. memory:只保存结构,数据保存在内存的存储引擎
    5. federated:支持远程查询的存储引擎,类似于dblink

  结合以上特点我们大概能了解每种引擎的特点和使用场景,当然只是个人的浅薄认识,但是比起认真准确的总结,这样做在未来更容易与实际应用相结合,在需要的时候再回头温故所需的存储引擎更加简单粗暴且有效。

  为什么没有myisam存储引擎呢?

  因为作为曾经默认的存储引擎,如今已被innodb替代,在实际的应用中自然不如innodb为主,在特殊场景使用其他更具有针对性的存储引擎有效。

  关于存储引擎的选择,通过本人一天的学习,总结不过一句话,用默认的innodb就对了;

  但是今天学习的意义又在哪里了,显然,以前人的经验,一个库中混合使用存储引擎是绝对不可取的,但是当一个大型的系统存在性能瓶颈是,我们采用分库处理时多存储引擎的优势就发挥出来了;

  例如我们可以将需要数据同步需要大量使用中间表的功能分离到memory的存储引擎中,因为他的数据直接保存在内存中,读写的速度必然足够的快,

  对于大数据量只读和写入的功能,如历史数据,我们可以使用压缩数据的Archive存储引擎。。

  

  查看数据库存储引擎概况的命令:show engines;

 

  当然对于目前的开发应用只需要了解Innodb存储引擎就足够了,它虽然不是最高效的,但是时最健壮,成熟的,了解innodb的特点与原理,对于我们对MySQL数据库的查询优化时非常必要的

  对Innodb的特点做以下总结;

  1. 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
  2. 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  3. 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
  4. 外键约束。MySQL支持外键的存储引擎只有InnoDB。
  5. 支持自动增加列AUTO_INCREMENT属性。
  6. 支持行级锁。
  7. 具有非常高效的缓存特性:能缓存索引,也能缓存数据。
  8. 支持分区,表空间,类似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大小。

 

   以上仅为个人片面的认识,如有不对的地方或者更好的见解希望大家多多指教。

 

 

  扩展:死锁与阻塞。

 

 
 
 
 
posted @ 2020-05-20 18:27  单从  阅读(190)  评论(0)    收藏  举报