如何选择mysql的存储引擎

mysql常用的三种存储引擎,下面就几方面进行学习总结:

MyISAM存储:

       如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用MySAM存储引擎,比如bbs中的发帖表,回复表。

innoDB存储:

       对事务要求高,保存的数据都是重要数据,我们建议使用innoDB,比如订单表,账号表,支付之类的。

Memory存储:

       比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory

MyISAM和innoDB的区别如图:

 


  

设计目标

InnoDB设计目标是处理大容量的数据,而MyISAM追求的是性能,两者产生的差异也是基于这点。 InnoDB是MySQL的默认存储引擎。

事务处理

InnoDB支持事务和外键,MyISAM不支持。MyISAM强调的是性能,InnoDB支持的功能更加完整。InnoDB支持事务带来了一个好处,发生故障时可以通过事务日志来恢复数据库,MyISAM特别要命的一点是崩溃后不能安全恢复,所以对于表比较大的情况不要用。

效率和锁

两种存储引擎的效率差异来自于锁的方式差异,MyISAM是表锁,对数据库进行写操作时会锁住整个表,效率很低;确定要修改数据的范围时,InnoDB是行锁,只锁一行的数据,写操作很快。但也有特例,比如 UPDATE student SET age=10 WHERE name LIKE '王%' ,这种情况不能确定要 UPDATE 的行位置,InnoDB同样会锁住整个表。

索引

MyISAM支持全文索引,InnoDB不支持。

COUNT(*)

MyISAM保存了表的行数,InnoDB没有。也就是说,执行 SELECT COUNT(*) FROM student 的操作时,MyISAM可以直接给出结果,而InnoDB要先扫描全表。不过对于加了where条件的查询操作,效果是一样的。

AUTO_INCREMENT

InnoDB下只能对自增字段单独建索引,MyISAM下可以和其它列一起建联合索引。

最后注意几点:

1.      事务安全

2.      查询和添加速度

3.      支持全文索引

4.      锁机制

5.      外键 MyISAM不支持外键,innoDB支持外键

如果你对数据库的存储引擎是myisam,请一定记住定时进行碎片整理:

我们应该定义对myisam进行整理:optimize table 表名。比如:

Optimize table test;

Mysql_query(“optimize table $表名”)


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值