InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。下面是已知的两者之间的差别,仅供参考。
innodb
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。
InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。
在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手册的最新版本总是被放置在那里,并且在那里可以得到 InnoDB 的商业许可(order commercial licenses)以及支持。
InnoDB 现在(2001年十月)在一些大的需高性能的数据库站点上被使用。著名的 Internet 新闻站点 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存储了超过 1 TB 的数据,而且另外的一个站点在 InnoDB 表上处理着平均每秒 800 次的插入/更新的负载。
MyISAM
MyISAM 是MySQL缺省存贮引擎 .
每张MyISAM 桌被存放在盘在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。
以下是一些细节和具体实现的差别:
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的性能优势。
分享到:
相关推荐
本文实例讲述了mysql更改引擎(InnoDB,MyISAM)的方法,分享给大家供大家参考。具体实现方法如下: mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 查看当前数据库的所支持的...
6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表...
在使用MySQL的过程中,有时会遇到需要将MyISAM存储引擎的数据表转换为InnoDB的情况。这种转换可能是出于对事务处理的支持、外键约束的需求或是更好的并发控制等原因。然而,在实际操作中可能会遇到各种各样的问题,...
InnoDB 存储引擎是 MySQL 的默认存储引擎,它提供了高性能、高可靠性的存储功能。 数据库和实例的区别 ----------------- 在 MySQL 中,数据库和实例是两个不同的概念。数据库是指物理操作系统或其他形式文件类型...
MyISAM是MySQL的一个老式存储引擎,容易发生崩溃。崩溃后,可以使用`REPAIR TABLE`命令修复单个表,或者使用`mysqlcheck`工具修复所有表,如`mysqlcheck –all-databases -uUSERNAME -pPASSWORD -r`。配置文件`my....
RDS for MySQL 目前支持 InnoDB 和 TokuDB 两种存储引擎,由于 MyISAM 引擎的自身缺陷,存在数据丢失的风险,新创建实例的 MyISAM 引擎表会自动转换为 InnoDB 引擎表。出于性能和安全性考虑,建议尽量采用 InnoDB ...
在性能测试部分,MySQL 5.5 进行了详细的基准测试,涵盖了只读 IOPS、只读带宽、只写 IOPS、只写带宽、读写 IOPS 等各个方面,并比较了 MySQL 5.5 与 MySQL 5.1.54 的性能差异。测试结果显示,在大多数场景下 MySQL ...
- **MyISAM与InnoDB对比**:根据读写需求选择合适的存储引擎,MyISAM适合读多写少的场景,InnoDB适合事务处理。 - **缓存与缓冲池**:调整`innodb_buffer_pool_size`,确保足够的内存用于缓存数据和索引。 3. **...
MySQL 5.5版本首次将InnoDB作为默认的存储引擎,取代了传统的MyISAM引擎,这一改变对数据库性能有着深刻的影响。 MySQL 5.5的性能提升主要体现在以下几个方面: 1. 默认存储引擎的变更:MySQL 5.5将默认的存储引擎...
3. **后端存储引擎的灵活性**:支持多种后端存储引擎,如InnoDB、MyISAM等,可根据具体需求选择合适的存储方式。 4. **垂直与水平拆分支持**:Spider引擎可以通过连接独立的表或基于哈希、范围等算法的分区表来实现...
MySQL采用客户端/服务器模型,支持多种存储引擎,如InnoDB(事务处理)、MyISAM(快速读取)等。了解这些存储引擎的工作原理、特点和适用场景,有助于选择最佳的数据存储方案。 2. **MySQL历史**: MySQL自1995年...
而MyISAM引擎则在处理大数据量的读取方面性能较好,且占用磁盘空间较InnoDB要小,但是它不支持事务和行级锁定。 在实际应用中,开发者需要根据应用场景的不同来选择不同的存储引擎。例如,如果一个应用需要处理多个...
MySQL存储引擎MyISAM在使用过程中可能会遇到一系列问题,这些问题包括表损坏、表过大导致无法访问以及数据目录磁盘空间不足。以下是对这些问题的详细分析和解决方案。 1. **处理MyISAM存储引擎的表损坏** 当...
innobackupex 是一个perl脚本,它包装了Xtrabackup的功能,使得同时备份InnoDB和MyISAM引擎的表变得可能。虽然使用innobackupex备份MyISAM表时需要对表进行读锁,但这个工具提供了一些有用选项,如`slave-info`,它...