MyISAM和InnoDB的异同

本文详细比较了MySQL中的两种表类型InnoDB与MyISAM。MyISAM适合大量SELECT操作,提供较快的查询速度;InnoDB支持事务处理及外部键等功能,适用于频繁的INSERT或UPDATE操作。

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

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

如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。如果执行大量的SELECT,MyISAM是更好的选择。

以下是一些细节和具体实现的差别:
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的性能优势。


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

 

 

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

 

### 逻辑数据库与物理数据库的区别与共同点 #### 区别 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、付费专栏及课程。

余额充值