1. 什么是存储引擎?

         比如:一个视频可以是mp4格式或者avi格式,但是用户看起来都是差不多的,直观差别就是占用系统的空间与清晰程度不一样。存储引擎差不多,对于mysql来说,无论采用的是什么引擎来存储,用户看到的数据都市一样的,不同的引擎存取,引擎功能,占用的空间大小,读取性能可能有区别。


mysql最常用的存储引擎为MyISAM和InnoDB 。


MyISAM:在mysql5.5以前是默认的存储引擎,在5.5以后修改为innodb,因为InnoDB引擎由于对事务参照完整性,以及高并发等优点。 


事务:(不仅是针对mysql,所有的关系性数据库都有事务特性)

       事务就是指逻辑上的一组sql语句操作,组成这组操作的各个sql语句,执行时要么全成功要么全失败。

事务的四大特性(ACID)

原子性(Atomicity):事务时一个不可分割的单位,事务中的所有sql等操作要么都发生,要么都不发生

一致性(Consistency):事务发生前和发生后,数据的完整性必须保持一直

隔离性(Isolation):当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话时不可见的,多个并发事务之间的数据是相互隔离的

持久性(Durability):一个事务一旦被提交,它对数据库中的数据改变是永久性的,如果出了错误不允许撤销,只能通过“补偿性事务”


事务的开启

       start transcation  开启事务

       rollback  回滚事务,如果执行错误就执行回滚

       commit   提交事务  退出事务


Innodb引擎

      最大的特性就是事务。

Innodb共享表空间,默认只有一个文件,在这个文件中在进行分类,也可以拆开,一个表一个为念

-rw-rw---- 1 mysql mysql 12582912 2月  22 20:37 ibdata1


InnoDB引擎 特点

     1.支持事务

     2.行级锁定(更新是一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响

     3.读写阻塞与事务隔离相关

     4.具有非常高效的缓存特性,能缓存索引,也能缓存数据

     5.整个表和主键以cluster方式存储,组成一颗平衡树

     6.所有Secondary Index都会保存主键信息

      *7.支持分区,表空间,类似oracle

小结:支持事务,支持行级锁,支持外键,表空间,对硬件要求比较高


innodb引擎调优精要

  1. 主键尽可能小,避免给Secondary index带来过大的空间负担

  2. 避免全表扫面,因为会使用表锁

  3. 尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO

  4. 在大批量小插入的时候,尽量自己控制事务而不要使用自动提交,有开关可以控制提交方式

  5. 合理设置innodb_flush_log_at_trx_commit的值为0,log buffer美妙就会被刷写日志文件到磁盘,提交事务的时候不要做任何操作

  6. 避免主键更新,因为这会带来大量的数据移动。


关于innodb在配置文件中的部分参数:关于更多的优化参考

innodb_additional_mem_pool_size 
用来存放Innodb的内部目录,这个值不用分配太大,系统可以自动调。通常设置16M够用了,如果表比较多,可以适当的增大。
设置方法,在my.cnf文件里:
innodb_additional_mem_pool_size = 16M

1)内存利用方面
innodb_buffer_pool_size 
这个是Innodb最重要的参数,和MyISAM的key_buffer_size有相似之处,但也是有差别的。 
这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。