mysql的存储引擎
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的存储引擎相关的知识,希望对你有一定的参考价值。
什么是存储引擎?
比如:一个视频可以是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引擎调优精要
主键尽可能小,避免给Secondary index带来过大的空间负担
避免全表扫面,因为会使用表锁
尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO
在大批量小插入的时候,尽量自己控制事务而不要使用自动提交,有开关可以控制提交方式
合理设置innodb_flush_log_at_trx_commit的值为0,log buffer美妙就会被刷写日志文件到磁盘,提交事务的时候不要做任何操作
避免主键更新,因为这会带来大量的数据移动。
关于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表的索引,数据,插入数据时的缓冲。
以上是关于mysql的存储引擎的主要内容,如果未能解决你的问题,请参考以下文章