表的引擎选择InnoDB

从InnoDB与MyISAM的区别及支持场景来说明,并给出一些比较明显的特性和注意点。

性能角度:

1.MyISAM类型的表强调的是局限场景下的性能,其单线程只插入或只读取比InnoDB类型更快。主要因为MyISAM使用的表锁的开销小于InnoDB的行锁开销,另外MyISAM实现简单,在读取到索引后直接操作磁盘,本身没有像InnoDB要维护InnoDB bufferpool等代价。同时如果数据比较离散而操作系统磁盘cache中没有数据,MyISAM会遇到大量随机IO,其速度此时未必会比InnoDB快。

2.因为MyISAM只有表锁,而InnoDB支持行锁,使得在混合读写情况下(MyISAM一个线程的写会阻塞另一个线程的读或写),MyISAM会变的比InnoDB慢。

功能角度:

1.事务

MyISAM不像InnoDB那样提供事务支持、外键(外键给MySQL运维及性能带来影响,已被禁止使用)等功能。所以如果要使用MyISAM,你需要确定你的业务不需要且以后也不需要高并发读写及事务支持。

2.全文检索

InnoDB在mysql5.6之后的版本也有全文检索功能了

安全与稳定角度:

InnoDB表损坏概率较低, 由于具备redo日志使得故障恢复能力较好, MyISAM表直采用系统文件存储,完全依赖操作系统物理文件,本身不具备物理恢复能力,特别是在例行的大批量灌数据等操作场景下,易发生损坏。

补充:

MyISAM也有其自身的一些优点,除了上面提到的单线程读或写效率高外,还体现在备份方便(直接拷贝表相关文件)且支持压缩备份(使用mysiampack,数据量为原有数据1/3)。同时,DBA目前有完备的技术来解决InnoDB备份及压缩问题。

在全表count中,如select count(*) from table语句,MyISAM只要简单的读出原就已经保存好的行数目而InnoDB 中不保存表的具体行数,要扫描一遍整个表来计算有多少行。这点在InnoDB表应用中要注意,通常情况下业务采取cache计数等方式来避免统计全表行数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值