关于Mysql数据库的知识总结

      2017年6月8日,天气阴。心情晴。mysql

    连续作梦两个晚上了,昨晚居然梦见一个很长时间不联系的初中同窗了,早上上班的路上聊了聊。女孩如今出差在贵州,风景秀美的地方。我说“你如今生活很滋润”。女孩说“那是你没有看到我不滋润的一面”。确实,在生活中咱们老是把本身光鲜的一面展现给别人,而把落魄的一面“假装起来”。sql

    昨天博客上有博友问我问题,居然称呼我为“大神”,内心慌的很,由于本身很清楚距离这个“大神”相差甚远,因此得加倍努力,向着“大神”的目标前进。数据库

     博友问的问题是关于Mysql数据库的,其中涉及数据引擎修复、优化数据表语句,以前历来没有考虑过这些问题,更没有用过。因此找了一些资料了解了一下,如今把本身找到的资料总结以下。安全

1.Mysql数据库存储引擎并发

概念:mvc

存储引擎其实就是如何实现存储数据,如何为存储的数据创建索引以及如何更新,查询数据等技术实现的方法。MySQL中的数据用各类不一样的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不一样的存储机制,索引技巧,锁定水平而且最终提供普遍的不一样功能和能力。在MySQL中将这些不一样的技术及配套的相关功能称为存储引擎。性能

(1)innoDB存储引擎优化

  ①innodb存储引擎的mysql表提供了事务,回滚以及系统崩溃修复能力和多版本并发控制的事务安全。spa

  ②innodb支持自增加列(auto_increment),自增加列的值不能为空,若是在使用的时候为空的话怎会进行自动从现有的值开始增加,若是有可是比如今的还大,则就保存这个值。日志

  ③innodb存储引擎支持外键(foreign key),外键所在的表称为子表(或从表),而所依赖的表称为父表(或主表)。

  ④innodb存储引擎最重要的是支持事务,以及事务相关联功能。

  ⑤innodb存储引擎支持mvcc的行级锁。

  ⑥innodb存储引擎索引使用的是B+Tree。

(2)MyISAM存储引擎

  1)MyISAM   这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。

  2)MyISAM   类型的表支持三种不一样的存储结构:静态型、动态型、压缩型。

  ①静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

      使用静态格式的表的性能比较高,由于在维护和访问的时候以预约格式存储数据时须要的开销很低。可是这高性能是由空间换来的,由于在定义的时候是固定的,因此无论列中的值有多大,都会以最大值为准,占据了整个空间。

  ②动态型:若是列(即便只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时myisam就自动使用动态型。

      虽然动态型的表占用了比静态型表较少的空间,但带来了性能的下降,由于若是某个字段的内容发生改变则其位置极可能须要移动,这样就会致使碎片的产生。随着数据变化的怎多,碎片就会增长,数据访问性能就会相应的下降。

      对于由于碎片的缘由而下降数据访问性,有两种解决办法:

     a、尽量使用静态数据类型。

     b、常用optimize   table语句,他会整理表的碎片,恢复因为表的更新和删除致使的空间丢失。

     若是存储引擎不支持 optimize  table , 则能够转储并从新加载数据,这样也能够减小碎片。

  ③压缩型:若是在这个数据库中建立的是在整个生命周期内只读的表,则这种状况就是用myisam的压缩型表来减小空间的占用。

  3)MyISAM也是使用B+tree索引,可是和Innodb的在具体实现上有些不一样。

(3)MEMORY存储引擎

  ①memory存储引擎相比前面的一些存储引擎,有点不同,其使用存储在内存中的数据来建立表,并且全部的数据也都存储在内存中。

  ②每一个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提升整个表的处理能力。

  ③memory存储引擎默认使用哈希(HASH)索引,其速度比使用B+Tree型要快,若是读者但愿使用B树型,则在建立的时候能够引用。

  ④memory存储引擎文件数据都存储在内存中,若是mysqld进程发生异常,重启或关闭机器这些数据都会消失。因此memory存储引擎中的表的生命周期很短,通常只使用一次。

(4)BlackHole存储引擎(黑洞引擎)

  支持事务,并且支持mvcc的行级锁,主要用于日志记录或同步归档,这个存储引擎除非有特别目的,不然不适合使用!

2.Mysql下优化表和修复表

随着mysql的长期使用,能够经过修复表来优化,优化时减小磁盘占用空间,方便备份。

REPAIR TABLE `table_name` 修复表      OPTIMIZE TABLE `table_name` 优化表

REPAIR TABLE ——用于修复被破坏的表。 
OPTIMIZE TABLE—— 优化表,用于回收闲置的数据库空间。当表上的数据行被删除时,所占据的磁盘空间并无当即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,而且对磁盘上的数据行进行重排。

注意:是磁盘上,而非数据库。 多数时间并不须要运行OPTIMIZE TABLE,只需在批量删除数据行以后,按期(每周一次或每个月一次)进行一次数据表优化操做便可,只对那些特定的表运行。

相关文章
相关标签/搜索