InnoDB与MyISAM实现索引方式的区别

简介: InnoDB与MyISAM实现索引方式的区别

InnoDBMySQL数据库的一种存储引擎,它使用B+树来实现索引。下面是InnoDB实现索引的方式:

  1. 聚簇索引(Clustered Index):
  • InnoDB使用B+树来实现聚簇索引,即将数据行直接存储在按照聚簇索引顺序排列的B+树叶子节点中。
  • 聚簇索引的主键定义决定了B+树的排序顺序。如果没有显式定义主键,则InnoDB会选择一个唯一且非空的索引作为聚簇索引,如果没有合适的索引,则会生成一个隐藏的聚簇索引。
  1. 辅助索引(Secondary Index):
  • InnoDB使用B+树来实现辅助索引,即非聚簇索引。
  • 辅助索引的叶子节点中存储的是索引字段值和对应的聚簇索引键值,通过聚簇索引键值可以在表中查找到对应的数据行。
  1. 自适应哈希索引(Adaptive Hash Index):
  • InnoDB还附带了一个自适应哈希索引结构,用于进一步提高查询性能。
  • 自适应哈希索引是基于内存的数据结构,存储最常用的索引值和对应的物理位置,以加速热点数据的访问。

综合来说,InnoDB使用B+树实现聚簇索引和辅助索引,通过聚簇索引定位到对应的数据行。自适应哈希索引作为一种辅助结构,用于加速常用的索引值的查找。这种索引方式可以提供高效的数据存储和检索能力,并且适用于大规模数据集和复杂的查询操作。

MyISAMMySQL数据库的另一种存储引擎,它使用B树来实现索引。下面是MyISAM实现索引的方式:

  1. 主索引(Primary Index):
  • MyISAM使用B树来实现主索引,也称为聚簇索引。主索引的叶子节点包含了完整的数据记录。
  • 主索引的构建是按照主键的顺序进行的,如果没有显式定义主键,MySQL会自动生成一个6字节的隐藏主键。
  1. 辅助索引(Secondary Index):
  • MyISAM使用B树来实现辅助索引,也称为非聚簇索引。辅助索引的叶子节点包含索引字段的值和对应的主键值。
  • 辅助索引的构建是基于逻辑上的顺序,而不是物理上的顺序。
  1. 全文索引(Full-Text Index):
  • MyISAM还支持全文索引,用于快速搜索文本内容。
  • 全文索引使用倒排索引的方式来实现。它将文本内容中的单词作为关键字,在倒排索引中记录每个单词出现在哪些文档中。

综上所述,MyISAM使用B树来实现主索引和辅助索引,通过主索引可以直接定位到数据行,辅助索引通过主键值来关联到对应的数据行。全文索引使用倒排索引的方式提供了快速的文本搜索功能。这种索引方式适用于一些非事务性的应用场景,如只读或者读写比例较低的情况下。需要注意的是,MyISAM不支持事务和行级锁定,因此在并发写入场景或需要保证数据一致性的情况下,可以考虑其他存储引擎如上文的InnoDB

 

相关文章
|
2月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
2月前
|
存储 关系型数据库 MySQL
“COUNT(*) MyISAM比InnoDB更快”是误解
在我印象中,MyISAM的查询速度比InnoDB快,但根据MySQL官网文章,从5.7版本开始,InnoDB性能大幅提升,在8.0中持续优化。InnoDB提供更好的性能、可靠性和可扩展性,支持ACID事务、行级锁定、崩溃恢复等特性,成为现代应用的默认选择。尤其在高可用性和灾难恢复方面,InnoDB是唯一选择。云服务也普遍不支持MyISAM。因此,建议使用MyISAM的用户尽早迁移到InnoDB以获得更佳性能和可靠性。
56 11
|
2月前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
183 7
|
2月前
|
存储 关系型数据库 MySQL
MySQL引擎InnoDB和MyISAM的区别?
InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
75 9
|
3月前
|
安全 关系型数据库 数据库
MyISAM和InnoDB的区别
InnoDB支持事务,MyISAM不支持 InnoDB支持外键,MyISAM不支持 InnoDB是聚簇索引,MyISAM是非聚簇索引 InnoDB支持行锁和表锁,MyISAM只支持表锁;【并发情况下,InnoDB性能更牛,默认一锁只会锁住一行数据】 InnoDB不支持全文索引,MyISAM支持 InnoDB支持自增和MVCC模式的读写,MyISAM不支持 InnoDB支持支出数据库异常崩溃后的安全恢复,MyISAM不支持【崩溃后,重启会保证数据恢复到崩溃前状态。这个恢复的过程依赖于redo.log】
|
3月前
|
存储 算法 关系型数据库
InnoDB与MyISAM实现索引方式的区别
InnoDB和MyISAM均采用B+树索引,但在实现上有所不同。InnoDB的主键索引在叶子节点存储完整数据记录,辅助索引则存储主键值;而MyISAM的主键索引与数据文件分离,仅存数据地址,且主辅索引无区别,支持非唯一主索引。
76 1
|
5天前
|
存储 SQL 关系型数据库
MySQL底层概述—2.InnoDB磁盘结构
InnoDB磁盘结构主要包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Double Write Buffer)、重做日志(redo log)和撤销日志(undo log)。其中,表空间分为系统、独立、通用、Undo及临时表空间,分别用于存储不同类型的数据。数据字典从MySQL 8.0起不再依赖.frm文件,转而使用InnoDB引擎存储,支持事务原子性DDL操作。
158 100
MySQL底层概述—2.InnoDB磁盘结构
|
5天前
|
缓存 算法 关系型数据库
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
152 97
MySQL底层概述—1.InnoDB内存结构
|
2天前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
MySQL底层概述—10.InnoDB锁机制
|
5天前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
MySQL底层概述—5.InnoDB参数优化