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执行的过程中只会使用一个索引的原因。这个中间表是没有建立索引的,因此也就谈不上用到第二个字段索引。


相关文章
|
25天前
|
存储 关系型数据库 MySQL
什么是MyISAM和InnoDB
【10月更文挑战第17天】什么是MyISAM和InnoDB
31 0
|
2月前
|
存储 关系型数据库 MySQL
InnoDB and MyISAM Index Statistics Collection
存储引擎收集表统计信息,供优化器使用,关键数据为平均值组大小,反映相同键前缀值的行数均值。该值影响索引效率,值越大,索引查找行数越多,效用越低。MySQL通过调整`innodb_stats_method`和`myisam_status`系统变量控制统计方法,涉及NULL值处理,如nulls_equal将所有NULL视为同一值组,可能影响索引使用决策。通过设置变量可优化统计信息收集,提升查询性能。
|
1月前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
115 0
|
3月前
|
存储 关系型数据库 MySQL
一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这篇文章是关于Java面试中关于数据库性能优化和MySQL特性的五个问题,包括处理慢查询、ACID特性保证、MVCC概念、MySQL主从同步原理以及MyISAM和InnoDB存储引擎的区别。
|
4月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
81 1
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
57 0
|
6月前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
54 0
|
6月前
|
存储 关系型数据库 MySQL
InnoDB中的索引方案
InnoDB中的索引方案
59 0
|
7天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件