InnoBD 与 MyISAM 两者之间的对比

来源:互联网 发布:张予曦淘宝店铺名 编辑:程序博客网 时间:2024/04/29 05:41


 

 

【存储引擎】

MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力。在MySQL中将这些不同的技术及配套的相关功能称为存储引擎。

 

 

在选择存储引擎时,需要考虑一下几点:

 

是否有外键吗?

InnoDB支持外键,MyISAM不支持

 

是否需要事务支持吗?

InnoDB支持事务,MyISAM不支持

 

是否经常使用什么样的查询模式?

1.COUNT()MyISAM表中会非常快,而在InnoDB表下可能会很痛苦

2.主键查询在InnoDB下相当快,但如果主键太长了也会导致性能问题

3.MyISAM适合select以及insert为主的应用,InnoDB适合频繁update以及涉及到安全性较高的应用

 

数据有多大?

1.大尺寸的数据集趋向于选择InnoDB方式,因为其支持事务处理和故障恢复。

2.数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,速度比较快。

 

◆是否需要全文索引吗?

MyISAM支持全文索引

InnoDB也支持FULLTEXT类型的索引

【注意,最后一条特别列举出来,其实从MySQL5.5开始就已经支持了,但是网上很多地方都说不支持,千万注意!】

 

根据经验来看,如果是一些小型的应用或项目,那么MyISAM 也许会更适合。

需要记住InnoDB 的表需要更多的内存和存储,转换100GBMyISAM表到InnoDB表可能会让你有非常坏的体验。

 

 

 

 

【区别总结】

 

 

1.InnoDB支持外键与事务

 

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

 

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

 

4.delete from table清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

 

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

 

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

0 0
原创粉丝点击