mysql索引结构

mysql中索引的数据结构:

1、基本上所有的索引都是B-Tree结构,一部分还有HASH索引。

2、索引分类(功能)

主键索引:一张表中最多有一个主键索引,而且该字段值不能为NULL,不能重复。

唯一索引:一张表中可以有多个唯一索引,而且字段可以为NULL,但是不能有重复值。

普通索引:一张表中可以有多个普通索引,而且值可以为NULL,并且值可以重复。

全文索引:全文索引就是将该字段的信息加以拆分和组合,形成一份清单,和sphinx全文索引一样。

复合索引:一个索引如果建立在多个字段上,那该索引就称为复合索引。

说明:其实这些索引所用的数据结构都是一样的B-Tree结构。只是他们对字段信息的约束条件不一样。

3、B-Tree数据结构简单说明

1)B-Tree结构首先是分成很多节点,一个节点上面有很多的关键字(建立索引的字段),这些关键字在节点上是按照顺序排列的。

2)在一个节点上,每一个关键字的前面都有一个下个节点指针。所以在一个节点上面,关键字的数量总是比节点指针的数量少一个。

3)每个节点指针指向下一个节点。

4、索引使用:左原则

通过对B-Tree的结构做简单的分析,可以得出,使用想使用索引应该满足左原则。如:

1)like查询的时候,不能以通配符开始

2)复合索引,如果想使用第二个关键字索引,那第一个关键字必须要确定。

列独立:只有参与表达式的字段在运算符的一边才能使用到索引。where id>3;where id+3>6;(这个使用不到索引)

null不会被建立索引。但是有其他的方法能记录null字段的信息。

时间: 2024-09-30 07:27:56

mysql索引结构的相关文章

【转】由浅入深探究mysql索引结构原理、性能分析与优化

摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与InnoDB索引相比较 第三部分:MYSQL优化 1.表数据类型选择 2.sql语句优化 (1)     最左前缀原则 (1.1)  能正确的利用索引 (1.2)  不能正确的利用索引 (1.3)  如果一个查询where子句中确实不需要password列,那就用“补洞”. (1.4)  like (2)

mysql索引结构原理、性能分析与优化

原文  http://wulijun.github.com/2012/08/21/mysql-index-implementation-and-optimization.html 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页查阅找出需要的资料. 唯一索引(unique index) 强调唯一,就是索引值必须唯一. 创建索引: create unique index 索引名 on 表名(列

由浅入深探究mysql索引结构原理、性能分析与优化

转载自:http://www.phpben.com/?post=74 第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料.关键字index ------------------------------------------------------------- 唯一索引 强调唯一,就是索引值必须唯一,关键字unique index 创建索引: 1.create unique

数据库为什么要用B+树结构--MySQL索引结构的实现

B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘上 2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关.) 3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k) 4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续).

[转]mysql索引结构原理、性能分析与优化

第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页查阅找出需要的资料. 唯一索引(unique index) 强调唯一,就是索引值必须唯一. 创建索引: create unique index 索引名 on 表名(列名); alter table 表名 add unique index 索引名 (列名); 删除索引: drop index 索引名 on 表名; alter table 表名 d

转:由浅入深探究mysql索引结构原理、性能分析与优化

摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1. 简单介绍B-tree B+ tree树 2. MyisAM索引结构 3. Annode索引结构 4. MyisAM索引与InnoDB索引相比较 第三部分:MYSQL优化 1.表数据类型选择 2.sql语句优化 (1)     最左前缀原则 (1.1)  能正确的利用索引 (1.2)  不能正确的利用索引 (1.3)  如果一个查询where子句中确实不需要password列,那就用“补洞”. (1.4)  like

由浅入深探究 MySQL索引结构原理、性能分析与优化

第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料.关键字index --------------------- 唯一索引 强调唯一,就是索引值必须唯一,关键字unique index 创建索引: 1.create unique index 索引名 on 表名(列名); 2.alter table 表名 add unique index 索引名 (列名); 删除索引: 1.

由浅入深探究mysql索引结构原理、性能分析与优化(转)

add by zhj:原文链接已经失效了,网上看到的都是转载,向作者Benwin致敬 摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与InnoDB索引相比较 第三部分:MYSQL优化 1.表数据类型选择 2.sql语句优化 (1)     最左前缀原则 (1.1)  能正确的利用索引 (1.2)  不能正确的利用索引 (1.3)  如果一个查询where

MySQL索引结构--由 B-/B+树看

B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中: 任何一个关键字出现且只出现在一个结点中: 搜索有可能在非叶子结点结束: 在关键字全集内做一次查找,性能逼近二分查找: B+ 树 B+树是B-树的变体,也是一种多路搜索树, 它与 B- 树的不同之处在于: 所有关键字存储在叶子节点出现,内部节点(非叶子节点并不存储

索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故障转移之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家. 这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构. 从一个简单的表开始 create table user( id int primary key, age int, hei