博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引简略
阅读量:3948 次
发布时间:2019-05-24

本文共 1171 字,大约阅读时间需要 3 分钟。

mysql索引

一般包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引

优势:类似目录,,降低io成本,提高搜索速度

劣势:占磁盘空间,降低更新速度

索引类型

主键索引

索引列中的值必须是唯一的,不允许有空值。

普通索引

MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。

唯一索引

索引列中的值必须是唯一的,但是允许为空值。

全文索引

只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。
MyISAM和InnoDB中都可以使用全文索引。

空间索引

MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型。MySQL在空间索引这方面遵循OpenGIS几何数据模型规则。

前缀索引

在文本类型如CHAR,VARCHAR,TEXT类列上创建索引时,可以指定索引列的长度,但是数值类型不能指定。

主键和唯一索引较为常用

B树非叶子节点也有数据,范围查询找到一个数据后还是得从根节点查询

索引使用B+树的数据结构

只有叶子节点才会存储数据,非叶子节点至存储键值。叶子节点之间使用双向指针连接,最底层的叶子节点形成了一个双向有序链表。

B+树找到两端后从头往后遍历双向链表即可

索引实现

MyISAM索引和InnoDB索引

MyISAM的数据文件和索引文件是分开存储的。MyISAM使用B+树构建索引树时,叶子节点中存储的键值为索引列的值,数据为索引所在行的磁盘地址。

InnoDB索引

主键索引(聚簇索引)

每个InnoDB表都有一个聚簇索引,聚簇索引使用B+树构建,叶子节点存储的数据是整行记录。一般情况下,聚簇索引等同于主键索引,当一个表没有创建主键索引时,InnoDB会自动创建一个ROWID字段来构建聚簇索引。

InnoDB创建索引的具体规则如下:

在表上定义主键PRIMARY KEY,InnoDB将主键索引用作聚簇索引。

如果表没有定义主键,InnoDB会选择第一个不为NULL的唯一索引列用作聚簇索引。 如果以上两个都没有,InnoDB 会使用一个6字节长整型的隐式字段 ROWID字段构建聚簇索引。该ROWID字段会在插入新行时自动递增。
除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。
在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。

InnoDB的数据和索引存储在一个文件t_user_innodb.ibd中。InnoDB的数据组织方式,是聚簇索引。

主键索引的叶子节点会存储数据行,辅助索引只会存储主键值。

转载地址:http://eqrwi.baihongyu.com/

你可能感兴趣的文章
linux学习之shell遍历数组
查看>>
python函数取参及默认参数使用
查看>>
python中判断是否为路径与是否为文件用法
查看>>
linux学习之shell中的${},##, %% , :- ,:+, ? 的使用
查看>>
linux学习之eval使用
查看>>
Python 中 pass的使用
查看>>
Spring 配置详解
查看>>
Spring面向切面aop编程
查看>>
Spring学习之Filter、Interceptor、Aop实现与区别
查看>>
tomcat中catalina是什么
查看>>
tomcat和应用集成
查看>>
Spring 添加@Autowired注释, 注入对象却为空
查看>>
springSecurity学习
查看>>
通过Java的api操作redis
查看>>
jquery基本选择器
查看>>
linux删除文件夹所有文件方法(排除指定文件或者目录)
查看>>
linux学习之shell字符串大小写转换
查看>>
Linux下用base64对字符串进行加密解密
查看>>
linux学习之/usr/bin/expect 的使用及传参数
查看>>
Hadoop-MapReduce的工作原理
查看>>