首页 > 数据库 >mysql innodb中的两类索引

mysql innodb中的两类索引

时间:2022-12-02 13:07:05浏览次数:66  
标签:Leaf 索引 innodb mysql 存放 Nodes NULL 主键


mysql的innodb中有两类索引,分别是 Cluster 形式的主键索引(Primary Key),另外一种则是和其他存储引擎(如MyISAM存储引擎)存放形式基本相同的普通 B-Tree 索引,这种索引在 InnoDB 存储引擎中被称为 Secondary Index。下面图。

[img]http://images.51cto.com/files/uploadimg/20090630/0907420.jpg[/img]

左侧为Clustered 形式存放的 Primary Key,右侧则为普通的 B-Tree 索引。两种索引在 Root Node 和Branch Nodes 方面完全一样。但它们会在Leaf Nodes方面出现差异。在 Primary Key 中,Leaf Nodes 存放的是表的实际数据,不仅仅包括主键字段的数据,还包括其他字段的数据,整个数据以主键值有序的排列。而 Secondary Index 则和其他普通的 B-Tree 索引没有太大的差异,只是在 Leaf Nodes除了存放索引键的相关信息外,还存放了 InnoDB 的主键值。

所以,在 InnoDB 中如果通过主键来访问数据效率是非常高的,而如果是通过 Secondary Index 来访问数据的话,InnoDB 首先通过 Secondary Index 的相关信息及相应的索引键检索到 Leaf Node,再通过Leaf Node 中存放的主键值和主键索引来获取相应的数据行。

但另外一个情况要注意的是,在删除的时候,情况却相反了,比如:
下面一个例子:
Create Table: CREATE TABLE `test1` (
`aid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id` bigint(20) unsigned NOT NULL DEFAULT '0',
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`aid`),
KEY `k` (`k`),
KEY `id` (`id`)

如果select count(*) from test1 where id>=0;
会发现用secondary index的效率比用主索引的效果是高的,
更多可以参考这里:
​​​http://optimmysql.blogspot.com/2007/07/innodb-row-counting-using-indexes.html ​

标签:Leaf,索引,innodb,mysql,存放,Nodes,NULL,主键
From: https://blog.51cto.com/u_14230175/5906928

相关文章

  • mysql的show index和optimize
    今天复习了MYSQL中的showindex和optimize,在mysql中,观察索引的用法如下:mysql>SHOWINDEXFROMmytableFROMmydb;mysql>SHOWINDEXFROMmydb.m......
  • mysql中的benchamark函数
    今天偶然发现MYSQL这个函数,可以测试某些函数的运行效率,可以为函数指定循环测试次数和表达式,比如mysql>set@input:='helloworld';mysql>selec......
  • mysql 性能学习1
    1使用explain语句去查看分析结果,如explainselect*fromtest1whereid=1;会出现:idselecttypetabletypepossible_keyskeykey_lenrefro......
  • Mysql 源码解读-执行器
    Mysql源码解读-执行器一条sql执行过程中,首先进行词法分析和语法分析,然后将由优化器进行判断,如何执行更有效率,生成执行计划,后面的任务就交给了执行器。在执行的过程中,执......
  • mysql docker安装mysql8
    目录mysqldocker安装mysql8安装命令验证mysqldocker安装mysql8mysql数据库想忽略大小写,如果原先已经有数据了,是无法直接实现的。需要先把数据导出,然后把数据删除改成忽......
  • MySQL的架构与历史1.5MySQL的存储引擎
    1.5MySQL的存储引擎1.5.1InnoDB存储引擎InnoDB是MySQL的默认事务型引,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,短期事务大部......
  • MYSQL BACKUP的SHELL相关语句
    #!/bin/bash###############Basicparameters##########################DAY=`date+%Y%m%d`Environment=$(/sbin/ifconfig|grep"inetaddr"|head-1|grep-v"127.0.......
  • 笔记: MYSQL BACKUP的SHELL相关语句
    #!/bin/bash ###############Basicparameters########################## DAY=`date+%Y%m%d` Environment=$(/sbin/ifconfig|grep"inetaddr"|head-1|grep-......
  • mysql中查询连接工作状态
    #!/bin/bashwhiletruedomysql-uroot-e'showprocesslist\G'|grepState:|uniq-c|sort-rnecho'---'sleep1Done如果观察到以下状态,则需......
  • mysql中的zeroDateTimeBehavior=convertToNull
    Cannotconvertvalue'0000-00-0000:00:00'fromcolumn1toTIMESTAMP在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候......