innodb与MyISAM类型的区别

网上关于这两个区别网上的资料基本一样

MyISAM类型不支持事务处理, MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。

另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。


InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。




MyIASM是IASM表的新版本,有如下扩展:


二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。




以下是一些细节和具体实现的差别:


1.InnoDB不支持FULLTEXT类型的索引。


2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。


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


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


5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。


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


任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
1. 研究结论
1)InnoDB占用磁盘空间比MyISAM大,MyISAM存储数据可节省空间12%,存储索引可节省95%;
2)InnoDB对空闲存储空间的使用不优。
研究发现,MyISAM可大量节省磁盘空间,特别是对索引的存储上,优势巨大,这对大型Mysql数据库的数据表和索引的物理设计,具有较大的指导意义。


根据上面的对比,可以看出MyISAM更适合用于查询select,当需要执行大量的insert和update时,innodb更适合处理高并发量操作的数据表,

MyISAM的话,在data文件夹里面就会有*.frm(保存表的格式)、*.MYD(保存表的实际数据)、*.MYI(保存表的索引),这三个文件,只要对这三个文件备份的话,如果系统崩溃了,也一样可以找回表的结构与数据。

可以做一个测试,在mysql data文件夹中新建一个文件夹test2 用phpmyadmin可以看到我们创建了一个test2的数据库,而我将备份的MyISAM数据文件

test.frm、test.MYD、test.MYI复制到新建的test2里面,刷新phpmyadmin 看以正常打开和读写这个表,包括里面的数据,这样我们平常做备份就简单了很多,只需要本分这些文件就可以了

很多人会遇到新建表的时候没有innodb这个类型,因为mysql默认是不开启这个类型的,需要在mysql.ini配置文件中将skip-innodb这个前面加#注释掉,这样就不回跳过innodb这个类型了,当然需要重启下mysql才能看到效果的,重启方法如下


RedHat Linux (Fedora Core/Cent OS) 
1.启动:/etc/init.d/mysqld start
2.停止:/etc/init.d/mysqld stop
3.重启:/etc/init.d/mysqld restart
Debian / Ubuntu Linux 
1.启动:/etc/init.d/mysql start
2.停止:/etc/init.d/mysql stop
3.重启:/etc/init.d/mysql restart
Windows
1.点击“开始”->“运行”(快捷键Win+R)
2.启动:输入 net stop mysql
3.停止:输入 net start mysql
提示
Redhat Linux 也支持service command,
启动:# service mysqld start 
停止:# service mysqld stop 
重启:# service mysqld restart
Windows下不能直接重启(restart),只能先停止,再启动。 ......


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值