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 $表名”)