MySQL索引详细

MySQL索引详细

一、简介

索引用于快速找出在某个列中有一特定值的行。

不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,

二、优缺点

2.1优点

  1. 所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引

  2. 大大加快数据的查询速度

2.2缺点

创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

索引也需要占空间,数据表中的数据也会有最大上限的
如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

三、分类

操作

查看索引:show index from

删除索引:drop index <索引名> on <表名>

3.1 单列索引

1.主键索引(自动创建)

create table user(id varchar(20) primary key,name varchar(20))

2.普通索引

MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

-建表时创建(此时索引名和列名相同)
create table user(id varchar(20) primary key, name varchar(20),key(name))
-建表后创建
create index name_index on user(name)

3.唯一索引

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

-建表示创建
create table user(id varchar(20) primary key, name varchar(20),unique(name))
-建表后创建
create unique index name_index on user(name)

3.2 组合索引(复合索引)

在表中的多个字段组合上创建的索引
只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

-建表示创建
create table user (id varchar(20) primary key, name varchar(20), age int,key(name,key))
-建表后创建
create index name_age_index on user(name,age)

MySQL 最左前缀原则

mysql 建立多列索引(联合索引)有最左前缀的原则,即最左优先,如:

如果有一个 2 列的索引 (col1, col2),则已经对 (col1)、(col1, col2) 上建立了索引;
如果有一个 3 列索引 (col1, col2, col3),则已经对 (col1)、(col1, col2)、(col1, col2, col3) 上建立了索引;

并且mysql 具有查询优化器

MySQL 的查询优化器会自动调整 where 子句的条件顺序以使用适合的索引,所以 MySQL 不存在 where 子句的顺序问题而造成索引失效

四、数据结构

<span>MySQL索引详细</span>

在mysql 使用InnoDB存储引擎时,首先会将插入的数据按照主键进行排序从而形成一个单向链表,然后为了提高查找效率,mysql就将单向链表升级成了B+树。

一般高度为3的B+数可存储的记录为10亿左右,因此对于我们2-3层树就足够了。

4.1 B+树特点

B+树是B树的一种变形,比B树具有更广泛的应用

  • 为所有叶子结点增加一个链指针;
  • 所有关键字都在叶子结点出现
  • 非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

4.2为什么使用B+数

五、聚簇/非聚簇索引

5.1 聚簇索引

定义

将数据与索引放到了一起,索引结构的叶子节点保存了行数据。

简介

1.如果一个主键被定义了,那么这个主键就是作为聚集索引

  1. 如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引

  2. 如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

  3. 自增主键会把数据自动向后插入,避免了插入过程中的聚集索引排序问题。聚集索引的排序,必然会带来大范围的数据的物理移动,这里面带来的磁盘IO性能损耗是非常大的。

注意

​ 主键索引一定是聚簇索引(在mysql数据库innodb引擎里面,主键的确就是聚集索引。)

5.2 非聚簇索引(辅助索引)

将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。

辅助索引访问数据总是需要二次查找

叶子节点存储的是主键值:(不存主键地址原因)如果数据记录发生了页裂变导致数据地址变了,那辅助索引也要更新,对于这种情况来说存储主键更好

<span>MySQL索引详细</span>

5.3注意

建议使用int 自增作为主键

原因:

聚簇索引的数据在索引中存放顺序与物理存放顺序是一样的,那么,只要索引是相邻的,对应的数据在磁盘上也是相邻的。
如果不是自增id,那么在添加记录时就会不断地调整数据的地址、数据的物理地址、分页,而不是直接添加到索引树的末尾。
如果是自增的,就简单了,直接一页一页逐步添加,索引结构相对紧凑,并且磁盘碎片也少,效率高。

六、无法使用索引

情况一:查询语句中使用like关键字

​ 如果使用like关键字,并且匹配字符串时的第一个字符为“%”,那么就无法查询索引树,因为不知道要查询什么。但如果%在后面,就可以 使用。

情况二:查询语句中使用多列索引

​ 不满足最左前缀原则时

情况三:查询语句中使用or关键字

​ 只有当or两边的字段都创建了索引,才可以使用索引,否则无法使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115168.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 软链接和硬链接到底有啥作用和区别呢_玉溪硬盒和软盒的区别

    软链接和硬链接到底有啥作用和区别呢_玉溪硬盒和软盒的区别前言:在网上搜索了好久,看了很多博客,某度知道等等。关于软硬链接的解释都太模糊,还有什么i节点,跨分区根本弄不明白,在查阅了书籍和询问老师后决定自己写一篇简单的博文,然初学者都能够明白的博文。一建立软链接和硬链接的语法软链接:ln-s源文件目标文件硬链接:ln源文件目标文件源文件:即你要对谁建立链接二什么是软链接和硬链接1,软链接可以理解成快捷方式。它和wind

  • 大数据分析-用户画像详解

    转自:百丽百灵(ID:BL100BL)转自数据分析公号,来源:数据客什么是用户画像?用户画像(UserProfile),作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础,奠定了大数据时代的基石。用户画像,即用户信息标签化,就是企业通过收集与分

  • 基于B样条曲线的路径规划(含matlab代码免费下载)[通俗易懂]

    基于B样条曲线的路径规划(含matlab代码免费下载)[通俗易懂]本文主要解决的是用B样条曲线实现无人车的路径规划,对于B样条曲线的概念不再赘述,有兴趣的朋友可以自行去了解。下面介绍如何利用B样条曲线对小车进行路径规划。1.无人车平面曲线规划1.1无人车位置控制我们一般假设无人车只移动在平地或者类平面场地,跟着我们期望的曲线运动。原理设点的坐标为(xd,yd),则可得到θd的表达式为那么在实际应用中,我们如何生成一条期望曲线并让小车跟随它运动呢?1.2小车移库问题我们在生活中最常见的就是小车移库问题,这也是无人车类比赛中最基础的一类题目。因为小车

  • java集合系列——List集合之Stack介绍(五)「建议收藏」

    Stack的简介Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

  • linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2

    linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2bzip2命令用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linuxbzip2命令的多种范例供大家查看,相信大家看完后会有很多收获。语法bzip2(选项)(参数)选项-c或——stdout:将压缩与解压缩的结果送到标准输出;-d或——decompress:执行解压缩;-f或-force:bzip2在…

  • Idea快捷键大全(Windows)

    Idea快捷键大全(Windows)Ctrl快捷键 介绍 Ctrl+F 在当前文件进行文本查找(必备) Ctrl+R 在当前文件进行文本替换(必备) Ctrl+Z 撤销(必备) Ctrl+Y 删除光标所在行或删除选中的行(必备) Ctrl+X 剪切光标所在行或剪切选择内容 Ctrl+C 复制光标所在行或复制选择内容 …

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号