MyISAM索引和InnoDB索引

简介: MyISAM索引和InnoDB索引

公众号merlinsea


MyISAM索引



1、MyISAM索引的底层数据结构是B+树,B+树叶子节点的data存放的是数据记录的磁盘物理地址。

2、MyISAM存储引擎的索引分为主键索引和非主键索引

   主键索引:要是索引的键要唯一 。

   非主键索引:索引键不要求唯一 特点:不论是主键索引还是非主键索引,都需要两次查表的过程。

640.jpg


InnoDB索引



1、InnoDB索引底层数据结构也是B+树,但主键索引和非主键索引中b+树的data存储内容不一样。

2、InnoDB索引分为主键索引和非主键索引:

   主键索引:b+树中的叶子节点data存储的内容就是记录本身,key是主键。

   非主键索引:b+树中的叶子节点data存储的内容就是记录主键,key是其他索引字段。

   特点:InnoDB中的数据表本身就是一张主键索引表,数据和主键绑定在一起。非主键索引查询的时候需要进行二次查询才能查询到记录。


InnoDB主键索引【以主键primary key作为索引】

640.jpg

InnoDB非主键索引【以非主键列作为索引】

640.jpg


通过上述的描述引出的聚簇索引和非聚簇索引概念

   聚簇索引:记录结果和索引键绑定在一起的索引,称之为聚簇索引,比如InnoDB的主键索引。

   非聚簇索引:记录结果和索引键分开的索引,称之为非聚簇索引,比如InnoDB中的非主键索引,MyISAM中的主键索引和非主键索引。

对于sql语句 select * from test where (a between 1000 and 2000) and (b between 50000 and 100000) order by b limit 1;的索引使用过程:


   假设这条sql语句在 a 和 b 字段上都建立了索引,mysql在执行的过程中,会选择一个mysql认为最合适的索引字段先将数据检索到缓存 中【类似一张中间表】,然后在根据另外一个字段继续筛选缓存中的数据,这也是为什么mysql执行的过程中只会使用一个索引的原因。这个中间表是没有建立索引的,因此也就谈不上用到第二个字段索引。


相关文章
|
3月前
|
存储 关系型数据库 MySQL
什么是MyISAM和InnoDB
【10月更文挑战第17天】什么是MyISAM和InnoDB
71 0
|
28天前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
1月前
|
存储 关系型数据库 MySQL
“COUNT(*) MyISAM比InnoDB更快”是误解
在我印象中,MyISAM的查询速度比InnoDB快,但根据MySQL官网文章,从5.7版本开始,InnoDB性能大幅提升,在8.0中持续优化。InnoDB提供更好的性能、可靠性和可扩展性,支持ACID事务、行级锁定、崩溃恢复等特性,成为现代应用的默认选择。尤其在高可用性和灾难恢复方面,InnoDB是唯一选择。云服务也普遍不支持MyISAM。因此,建议使用MyISAM的用户尽早迁移到InnoDB以获得更佳性能和可靠性。
47 11
|
1月前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
146 7
|
1月前
|
存储 关系型数据库 MySQL
MySQL引擎InnoDB和MyISAM的区别?
InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
64 9
|
2月前
|
安全 关系型数据库 数据库
MyISAM和InnoDB的区别
InnoDB支持事务,MyISAM不支持 InnoDB支持外键,MyISAM不支持 InnoDB是聚簇索引,MyISAM是非聚簇索引 InnoDB支持行锁和表锁,MyISAM只支持表锁;【并发情况下,InnoDB性能更牛,默认一锁只会锁住一行数据】 InnoDB不支持全文索引,MyISAM支持 InnoDB支持自增和MVCC模式的读写,MyISAM不支持 InnoDB支持支出数据库异常崩溃后的安全恢复,MyISAM不支持【崩溃后,重启会保证数据恢复到崩溃前状态。这个恢复的过程依赖于redo.log】
|
2月前
|
存储 算法 关系型数据库
InnoDB与MyISAM实现索引方式的区别
InnoDB和MyISAM均采用B+树索引,但在实现上有所不同。InnoDB的主键索引在叶子节点存储完整数据记录,辅助索引则存储主键值;而MyISAM的主键索引与数据文件分离,仅存数据地址,且主辅索引无区别,支持非唯一主索引。
56 1
|
1月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
73 7
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
177 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。