MyISAM | InnoDB | |
构 成上的区别: |
每个MyISAM表在磁盘上存储三个文件。文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 .MYD文件存储数据 (MYData)。 .MYI文件存储索引 (MYIndex)。 | InnoDB表空间数据文件和日志文件,InnoDB表的大小只受限于操作系统文件的大小 |
事务处理上方面: | MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持 | InnoDB提供事务支持事务,外部键等高级 数据库功能 |
SELECT UPDATE,INSERT,Delete操 作 | 如果执行大量的SELECT,MyISAM是更好的选择 |
1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除。 3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用 |
表的具体行数 | select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的 | InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行 |
锁 | 表锁,MyISAM表锁读写互相阻塞,写锁优先级高于读锁。参数选项low_priority_updates设置写锁优先级比读锁低、参数选项concurrent_insert配置是否使用并发插入特性,concurrent_insert=0 表示不允许并发插入,concurrent_insert=1表示允许对没有空数据块的表使用并发插入(缺省),concurrent_insert=2表示对所有表允许并发插入 |
提供行锁(locking on row
level),提供与Oracle类型一致的不加锁读取(non-locking
read in SELECTs)。MySQL的行锁是针对索引加的锁,不是针对记录加的锁,在不通过索引条件查询的时候,InnoDB使用的是表锁,而不是行锁。 另外,即便在条件中使用了索引字段,但是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁 |
相关文章
订阅评论
登录
请登录后发表评论
0 评论
最旧