MYSQL INNODB索引

在MYSQL中索引是在存储引擎实现的,所以各个存储引擎中的索引的实现方式是不一样的。本章节主要是学习INNODB存储引擎中最常用的索引类型:聚簇索引和B-Tree索引

在INNODB存储引擎中表其实是oracle中类似的聚簇表而不是普通的堆表。INNODB根据主健的顺序存储数据,数据直接存储在主健的叶子节点上面。数据即索引,索引即数据。因此为了让数据尽可能的按照主健的顺序存储在一起innodb还专门设计了一个Insert buffer机制来保证(但不能百分之百的保证)。如果数据根据主健值随机插入则会导致大量的拆页操作,不仅会影响插入的效率同样会影响其他查询操作增加随机I/O读。

当然聚簇索引按照key的顺序插入数据在某些高并发的情况下也会导致一些其他的问题。比如间隙索和自增锁(如果使用了自增列的话)

上面提到的主健,如果不指定会怎么样呢? innodb会默认使用第一个唯一索引作为key,如果都不存在则会虚拟出一个key来实现。

除了主健索引其他的都称之为"二级索引",为什么成之为二级索引呢?

因为在其他普通的索引(B-Tree索引)中存储的并不是存储的记录的物理地址而是行号(主健值),根据主健值然后在去到聚簇索引中去找到该行的位置,找到了行的位置也即找到了数据。还是因为聚簇索引的"数据即索引,索引即数据"。因此不难理解按照主健插入数据有多么重要了吧。

时间: 2024-10-25 12:34:46

MYSQL INNODB索引的相关文章

MySQL InnoDB 索引组织表 & 主键作用

InnoDB 索引组织表 一.索引组织表定义 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT). 在InnoDB存储引擎中,每张表都有个主键(Primary key),如果在创建表时没有地定义主键,则InnoDB存储引擎会选择表中符合条件的列去创建主键. 条件: 1.  首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键. 2. 如果不符合上述条件,InnoDB存储

MySQL(Innodb)索引的原理

引言 回想四年前,我在学习mysql的索引这块的时候,老师在讲索引的时候,是像下面这么说的 索引就像一本书的目录.而当用户通过索引查找数据时,就好比用户通过目录查询某章节的某个知识点.这样就帮助用户有效地提高了查找速度.所以,使用索引可以有效地提高数据库系统的整体性能. 嗯,这么说其实也对.但是呢,大家看完这种说法,其实可能还是觉得太抽象了!因此呢,我还想再深入的细说一下,所以就有了此文!需要说明的是,我说的内容只在Mysql的Innodb引擎中是成立的.在Sql Server.oracle.M

mysql InnoDB 索引小记

1.索引使用原则 1).最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2).=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)引可以任意顺序,mysql的查询优化器会帮你优化成索引

MySQL InnoDB 逻辑存储结构

MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.ps:页在一些文档中又称块(block). InnoDB存储引擎的逻辑存储结构大致如下: 一.表空间(table space) 表空间分为了两种,这里简单的概括一下: 1. 独立表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件. 其中这个文

剖析Mysql的InnoDB索引

摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇以介绍InnoDB为主.少量涉及MyISAM作为对照. 这篇文章是我在学习过程中总结完毕的.内容主要来自书本和博客(參考文献会给出).过程中增加了一些自己的理解.描写叙述不准确的地方烦请指出. 1 各种树形结构 本来不打算从二叉搜索树開始,由于网上已经有太多相关文章,可是考虑到清晰的图示对理解问题

mysql innodb存储引擎的聚集索引

InnoDB聚集索引 MySQL有没有支持聚集索引,取决于采用哪种存储引擎. MySQL InnoDB一定会建立聚集索引,所谓聚集,指实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚集索引,即MySQL不会一次把数据行保存在二个地方.InnoDB通常根据主键值(primary key)进行聚集,但是当一个表没有PK怎么办?InnoDB选取聚集索引参照列的顺序是: 1.如果声明了主键(primary key),则这个列会被做为聚集索引2.如果没有声明主键,则会用一个唯一且不为空的索引

MySQL的InnoDB索引原理详解

摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比. 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出. 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大

MySQL的InnoDB索引原理详解 (转)

摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比. 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出. 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很

关于MySQL InnoDB表的二级索引是否加入主键列的问题解释

关于MySQL InnoDB表的二级索引是否加入主键,总结如下: 1对于MySQL InnoDB表的二级索引是否加入主键,官方也有明确的说明,建议线上MySQL的二级索引创建时强制加入主键所有的列,可以做到所有的MySQL 版本统一. 2.MySQL 5.6.9之前,InnoDB引擎层是会对二级索引做自动扩展,但是优化器不能识别出扩展的主键. 3.MySQL 5.6.9开始InnoDB引擎层是会对二级索引做自动扩展,优化器能识别出扩展的主键. 4.索引的大小一样,二级索引有没有加入主键列,在In