加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL使用心得(五) InnoDB与MyISAM - MySQL教程

发布时间:2014-05-12 21:40:42 所属栏目:MySql教程 来源:站长网
导读:本文主要整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别: 构成上的区别 MyISAM 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字
本文主要整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别:

构成上的区别

MyISAM

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文 件类型。

.frm文件存储表定义。

数据文件的扩展名为.MYD (MYData)。

索引文件的扩展名是.MYI (MYIndex)。

InnoDB

基于磁盘的资源是InnoDB表空间数据文件和它的日志文件。

.user.frm存储表结构。

user.ibd存储数 据文件。

事务处理上方面

MyISAM

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持

InnoDB

InnoDB提供事务支持事务,外部键等高级数据库功能

SELECT UPDATE,INSERT,Delete操作

MyISAM

如果执行大量的SELECT,MyISAM是更好的选择

InnoDB

1.如果 你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表

2.DELETE FROM table时,InnoDB不 会重新建立表,而是一行一行的删除。

3.LOAD TABLE FROM MASTER(将主服务器的数据拷贝到从服务器的一个途径是 使)操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用 的额外的InnoDB特性(例如外键)的表不适用

对AUTO_INCREMENT的操作

MyISAM

每表一个AUTO_INCREMEN列的内部处理。

MyISAM为INSERT和UPDATE操作自动 更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT 列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。

AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置

对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中 ,可以和其他字段一起建立联合索引。

InnoDB

如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表 句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。

自动增长计数器仅被存储在主内存中,而不是 存在磁盘上

参考:http://kb.cnblogs.com/page/82976/

表的具体行数

MyISAM

select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当 count(*)语句包含 where条件时,两种表的操作是一样的。

InnoDB

InnoDB 中不保存表的具体行数,也就是说,执 行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

MyISAM

表锁

InnoDB

提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non- locking read in

SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描 的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

查看本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!