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
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
19 0
|
3天前
|
存储 算法 关系型数据库
深入理解InnoDB索引数据结构和算法
1. **索引定义**:索引是提升查询速度的有序数据结构,帮助数据库系统快速找到数据。 2. **索引类型**:包括普通索引、唯一索引、主键索引、空间索引和全文索引,每种有特定应用场景。 3. **数据结构**:InnoDB使用B+树作为索引结构,确保所有节点按顺序排列,降低查询时的磁盘I/O。 4. **B+树特性**:所有数据都在叶子节点,非叶子节点仅存储索引,提供高效范围查询。 5. **索引优势**:通过减少查找数据所需的磁盘I/O次数,显著提高查询性能。 **总结:**InnoDB索引通过B+树结构,优化了数据访问,使得查询速度快,尤其适合大数据量的场景。
49 0
深入理解InnoDB索引数据结构和算法
|
3天前
|
存储 安全 关系型数据库
|
3天前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
68 0
|
3天前
|
存储 SQL 关系型数据库
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
56 1
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
|
3天前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
3天前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
37 0
|
3天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
16 0
|
3天前
|
存储 关系型数据库 MySQL
InnoDB中的索引方案
InnoDB中的索引方案
16 0
|
3天前
|
存储 关系型数据库 MySQL
mysql 索引的代价(InnoDB)
mysql 索引的代价(InnoDB)