InnoDB和MyISAM 异同

本文详细比较了MySQL中的InnoDB与MyISAM表类型的优缺点,包括事务支持、性能差异、索引类型等方面,有助于理解不同场景下选择合适表类型的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InnoDB和MyISAM是在使用MySQL时最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

 

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

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的性能优势。

 

InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的负荷。

 

在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

 

InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项innodb_file_per_table。

 

http://www.innodb.com/上可以找到InnoDB最新的信息。InnoDB手册的最新版本总是被放置在那里,并且在那里可以得到InnoDB 的商业许可以及支持。

 

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

    1. NULL列索引。
    2. 对变长行比ISAM表有更少的碎片。
    3. 支持大文件。
    4. 更好的索引压缩。
    5. 更好的键码统计分布。
    6. 更好和更快的auto_increment处理。

    7. 二进制层次的可移植性。

### 逻辑数据库与物理数据库区别与共同点 #### 区别 1. **定义与抽象层次** 逻辑数据库是一种抽象的表示形式,主要关注数据的组织方式、关系以及用户如何访问这些数据。它描述了数据的结构属性,而不涉及具体的存储细节[^2]。 物理数据库则侧重于数据的实际存储方式,包括文件系统、索引结构、磁盘布局等。它是数据库在硬件设备上的具体实现[^3]。 2. **设计阶段** 在数据库设计过程中,逻辑数据库属于逻辑模型阶段,重点在于定义实体、属性关系,确保满足业务需求。而物理数据库属于物理模型阶段,关注性能优化、存储效率硬件特性[^2]。 3. **存储细节** 逻辑数据库不关心数据存储的具体位置或格式,例如是否使用索引、分区或压缩技术。而物理数据库需要明确这些细节,例如索引类型(B树、哈希)、存储引擎(如InnoDBMyISAM)以及数据页的分配方式[^3]。 4. **用户视角** 逻辑数据库面向最终用户应用程序开发者,提供一种易于理解操作的数据视图。物理数据库则面向数据库管理员(DBA),他们需要管理存储空间、优化查询性能并解决硬件相关问题。 5. **日志机制** 在日志记录方面,逻辑数据库通常只记录事务的逻辑变化(如插入、删除、更新操作),而不涉及底层存储的变化。而物理数据库的日志可能包含更详细的物理记录信息,例如数据页编号(pageno)blobspace的修改记录[^3]。 #### 共同点 1. **目标一致** 无论是逻辑数据库还是物理数据库,其核心目标都是为了有效地存储管理数据,并支持高效的查询更新操作[^1]。 2. **依赖关系** 逻辑数据库的设计需要基于物理数据库的能力进行调整。例如,某些复杂的逻辑关系可能需要特定的物理存储结构(如分区表或索引)来支持高效查询[^2]。 3. **数据一致性** 两者都需要确保数据的一致性完整性。逻辑数据库通过约束(如主键、外键)来维护数据关系,而物理数据库通过事务管理、日志记录恢复机制来保证数据的持久性一致性。 4. **可扩展性** 随着数据量的增长,逻辑数据库物理数据库都需要具备良好的扩展能力。逻辑数据库可以通过分片(sharding)或分布式架构来扩展,而物理数据库则需要优化存储布局资源分配策略。 ```python # 示例:逻辑数据库与物理数据库的差异体现在SQL执行上 # 逻辑层面的操作 logical_query = "SELECT * FROM employees WHERE department = 'Sales';" # 物理层面的操作(假设使用MySQL InnoDB存储引擎) physical_operation = """ 1. 查找部门为'Sales'的索引节点; 2. 根据索引定位到对应的存储页; 3. 加载存储页到内存中; 4. 返回符合条件的记录。 """ ``` #### 总结 逻辑数据库物理数据库虽然在抽象层次关注点上存在显著差异,但它们共同构成了完整的数据库系统。逻辑数据库提供了用户友好的数据视图,而物理数据库则确保了数据的高效存储检索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值