MySQL----索引

news2024/11/24 4:06:22

文章目录

  • 一、索引的概念
  • 二、索引的作用
    • 索引的副作用
    • 创建索引的依据
  • 三、索引的分类和创建
    • 3.1普通索引
      • 创建直接索引
      • 修改表方式创建
      • 创建表的时指定索引(不推荐使用)
    • 3.2唯一索引
      • 直接创建唯一索引
      • 修改表方式创建
      • 创建表时指定
    • 3.3主键索引
      • 创建表的时指定
      • 修改表方式创建
    • 3.4 组合索引
    • 3.5 全文索引(FULLTEXT)
      • 直接创建索引
      • 修改表方式创建
      • 创建表的时指定索引
      • 使用全文索引查询
  • 四、查看索引
  • 五、删除索引
    • 5.1直接删除进程
    • 5.2修改表方式删除索引
    • 5.3删除主键索引
  • 六、分析是否使用索引

一、索引的概念

  • 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。
  • 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
  • 索引是表中一列或者若干列值排序的方法。简单来说索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
  • 建立索引的目的是加快对表中记录的查找或排序

二、索引的作用

  • 设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
  • 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
  • 可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。
  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  • 可以加快表与表之间的连接。
  • 在使用分组和排序时,可大大减少分组和排序的时间。
  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能。

总结:索引的作用其实就是加快表的查询速度,同时对表的字段进行排序。

索引的副作用

索引需要占用额外的磁盘空间。**对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而 InnoDB 引擎的表数据文件本身就是索引文件。

更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

创建索引的依据

1)表中的记录行数较多时,一般超过300行的表建议要有索引
2)建议在 表中的主键字段、外键字段、多表连接使用的字段、唯一性较好的字段,不经常更新的字段、经常出现在where、group by、order by 子语句的字段、小字段 创建索引
3)不建议在 唯一性较差的字段、更新太频繁的字段、大文本字段 上创建索引

三、索引的分类和创建

3.1普通索引

创建直接索引

CREATE INDEX 索引名 ON 表名 (列名[(length)]);
  • (列名(length)):length是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length个字符来创建索引,这样有利于减小索引文件的大小。在不损失精准性的情况下,长度越短越好。
  • 索引名建议以“ _index ”结尾。

在这里插入图片描述

修改表方式创建

ALTER TABLE 表名 ADD INDEX 案引名 (列名);

在这里插入图片描述

创建表的时指定索引(不推荐使用)

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));

在这里插入图片描述

3.2唯一索引

与普通索引类似,但区别是唯一索引列的每个值都唯一。

唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

直接创建唯一索引

CREATE UNIQUE INDEX 索引名 ON 表名(列名);

在这里插入图片描述

修改表方式创建

ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);

在这里插入图片描述

创建表时指定

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...],UNIQUE 索引名 (列名));

在这里插入图片描述

3.3主键索引

是一种特殊的唯一索引,必须指定为 “PRIMARY KEY”。

一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。

创建表的时指定

CREATE TABLE 表名 ([...],PRIMARY KEY (列名));

在这里插入图片描述

修改表方式创建

ALTER TABLE 表名 ADD PRIMARY KEY (列名); 

在这里插入图片描述

3.4 组合索引

可以是单列上创建的索引,也可以是在多列上创建的索引。

方式一:

alter table 表名 add index 索引名 (字段1,字段2);

在这里插入图片描述

方式二:

CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));

在这里插入图片描述

方式三:

CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));

3.5 全文索引(FULLTEXT)

适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。

在 MySQL5.6 版本以前FULLTEXT 索引仅可用于 MyISAM 引擎,在 5.6 版本之后 innodb 引擎也支持 FULLTEXT 索引。

全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。每个表只允许有一个全文索引

直接创建索引

CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);

在这里插入图片描述

修改表方式创建

ALTER TABLE 表名 ADD FULLTEXT 索引名 (列名);

在这里插入图片描述

创建表的时指定索引

CREATE TABLE 表名 (字段1 数据类型[,...],FULLTEXT 索引名 (列名));

在这里插入图片描述

数据类型可以为 CHAR、VARCHAR 或者 TEXT。

使用全文索引查询

SELECT * FROM 表名 WHERE MATCH(列名) AGAINST('查询内容');

在这里插入图片描述

四、查看索引

show index from 表名;

在这里插入图片描述

show index from 表名\G; #竖向显示表索引信息

在这里插入图片描述

show keys from 表名;

在这里插入图片描述

show keys from 表名\G;

在这里插入图片描述

各字段的含义如下:

字段含义
Table表的名称
Non_unique如果索引不能包括重复词,则为 0;如果可以,则为 1
Key_name索引的名称。
Seq_in_index索引中的列序号,从 1 开始。
Column_name列名称。
Collation列以什么方式存储在索引中。在 MySQL 中,有值 A(升序)或 NULL(无分类)。
Cardinality索引中唯一值数目的估计值。
Sub_part如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL
Packed指示关键字如何被压缩。如果没有被压缩,则为 NULL
Null如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO
Index_type用过的索引方法(BTREEFULLTEXTHASHRTREE)。
Comment备注。

五、删除索引

5.1直接删除进程

DROP INDEX 索引名 ON 表名;

在这里插入图片描述

5.2修改表方式删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

在这里插入图片描述

5.3删除主键索引

ALTER TABLE 表名 DROP PRIMARY KEY;

在这里插入图片描述

六、分析是否使用索引

EXPLAIN 来分析和优化,explain 显示了 MySQL 如何使用索引来处理 select 语句以及连接表。

explain 的相关参数:

参数含义
possible_keys显示可能应用在这张表中的索引。
key实际使用的索引。如果为 NULL,则没有使用索引。
key_len使用的索引的长度。在不损失精确性的情况下,长度越短越好。
ref显示索引的哪一列被使用了,如果可能,则是一个常数。
Extra关于 MySQL 如何解析查询的额外信息。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年天津农学院专升本拟招生专业限制报考范围

天津农学院2024年升本拟招生专业及报考范围 物流管理 科 类:文史、理工 专业报考范围:不限 人力资源管理 科 类:文史、理工 专业报考范围:不限 水产养殖学 科 类: 理工 专业报考范围如…

微服务springcloud 06.feign框架,配合ribbon 负载均衡和重试,配合hystrix 降级,监控和熔断测试

feign是ribbon hystrix 的整合 01.新建 sp09-feign 项目 第一步&#xff1a; 第二步&#xff1a;选择依赖&#xff1a; pom.xml 需要添加 sp01-commons 依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

游泳可以戴的耳机有哪些?四款专业的游泳耳机推荐

现在人们都开始热衷于运动健身&#xff0c;运动时大多会听音乐&#xff0c;市面上的运动耳机层出不穷&#xff0c;多数都是蓝牙耳机&#xff0c;但是有一些运动不太适合。 例如游泳&#xff0c;其他运动都可以将手机放在附近&#xff0c;但是游泳就不行了。所以游泳时可以听歌的…

【云服务】阿里云服务器镜像备份到本地

​ 首先&#xff0c;让我们了解一下阿里云平台上自定义镜像的功能。通过自定义镜像&#xff0c;用户可以将云服务器的当前状态保存为镜像&#xff0c;以便在需要时快速恢复到该状态。此外&#xff0c;自定义镜像还可以作为模板创建新的云服务器&#xff0c;方便用户快速部署相同…

1742_C语言中的指针与数组

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 之所以常常把数组与指针联系到一块儿是因为数组的名字在很多时候等同于指向数组首元素的指针。在写程序的时候&#xff0c;这常常会给我们带来很多方便。尤其是需要把数组作为一个函数的处理对象时…

Java并发(十一)----线程五种状态与六种状态

1、五种状态 这是从 操作系统 层面来描述的 【初始状态】仅是在语言层面创建了线程对象&#xff0c;还未与操作系统线程关联 【可运行状态】&#xff08;就绪状态&#xff09;指该线程已经被创建&#xff08;与操作系统线程关联&#xff09;&#xff0c;可以由 CPU 调度执行 …

Android Studio实现贪吃蛇小游戏

项目目录 一、项目概述二、开发环境三、详细设计四、运行演示五、项目总结 一、项目概述 贪吃蛇是一款经典的街机游戏&#xff0c;不仅在电子游戏史上占有一席之地&#xff0c;也在很多人的童年回忆中留下了深刻的印象。在游戏中&#xff0c;玩家需要操纵一条蛇通过吃食物来增…

leetcode222. 完全二叉树的节点个数(java)

完全二叉树的节点个数 leetcode222. 完全二叉树的节点个数题目描述 递归广度优先遍历二叉树专题 leetcode222. 完全二叉树的节点个数 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/count-complete-tree-nodes 题目描述…

Linux下的打包和压缩/解压解包

文章目录 一、打包和压缩二、Linux下进行打包和压缩1.zip指令&#xff0c;unzip指令2.tar指令 一、打包和压缩 打包呢就是把所有东西装在一起&#xff0c;然后压缩就是将这一包东西给它合理摆放&#xff0c;腾出更多的空间&#xff0c;以便放更多的东西。 压缩可以将如果东西是…

【github加载不出来】github 加载不出来、获取GitHub官方CDN地址、修改系统Hosts文件 刷新缓存

目录 github 加载不出来获取GitHub官方CDN地址修改系统Hosts文件刷新缓存 github 加载不出来 获取GitHub官方CDN地址 https://www.ipaddress.com/打开后如图&#xff0c;右上角搜索查 查找这三个DNS链接的解析地址 http://github.com http://assets-cdn.github.com http://git…

java springboot整合Druid数据源配置

整合的最后一块 我们整合一个数据源 Druid 我们还是打开idea 创建一个项目 路径和版本调一下 路径选一个好的目录就可以了 至于版本 最好是 java 8 JDK 1.8 然后 Next 下一步 这里 spring boot 的版本记得选一下 不要搞太高 2.几即可 Druid 在这里 显然也是找不到的 所以 我…

安卓端Google隐私沙盒归因报告聚焦

自2022年2月Google首次提出将推出隐私沙盒至今已一年有余。现在&#xff0c;安卓端的隐私沙盒Beta测试已针对特定Android13设备正式开始。作为早期测试者&#xff0c;Adjust很高兴与 Google一同迈出增强用户隐私的第一步&#xff0c;并在接下来的旅程中继续携手同行。为帮助移动…

framework编译应用代码

代码编译 APP或Service代码单编调试 1、在aosp文件目录下在将环境变量加载到内存中&#xff0c;在终端中输入下面命令 source build/envsetup.sh 2、选择平台编译选项 lunch 3、输入后会出现一个选择列表&#xff0c;然后输入你想要的项目的序号即可。如下所示我这里选择的7…

【OpenMMLab AI实战营二期笔记】第十天 底层视觉与MMEditing

1.图像超分辨率 1.1 什么是图像超分辨率&#xff1f; 根据从低分辨率图像重构高分辨率图像 1.2 目标&#xff1a; 提高图像的分辨率高分图像符合低分图像的内容恢复图像的细节、产生真实的内容 1.3 应用&#xff1a; 经典游戏高清重制动画高清重制照片修复节约传输高清图…

当你拥有什么样的高性能计算技术水平,你才能成为一名高性能计算工程师? ...

在当今科技快速发展的时代&#xff0c;高性能计算工程师成为了推动科学研究、工程仿真和大数据处理的关键人才。尤其是我国大力发展科研基建&#xff0c;打造科研技术底座&#xff0c;这就更加需要高性能计算工程师通过自身的技术来加速科研建设和研发的进度和速度。 我们调研了…

Spark大数据处理学习笔记(3.8.1) Spark RDD典型案例-利用RDD计算总分与平均分

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/Twpwe】 文章目录 1. 任务目标2. 实现思路3. 准备工作3.1 启动HDFS服务3.2 启动Spark服务3.3 在本地创建成绩文件3.4 将成绩文件上传到HDFS 4. 完成任务4.1 在Spark Shell里完成任务4.1.1 读取成绩…

虚拟机使用

文章目录 VMWare安装Warning 系统安装MacOS解锁工具Unlocker Warning VMWare配置系统启动安装VMware tools联网 VMWare安装 Warning 安装完VMWare后要在BIOS中开启intel VT&#xff08;虚拟化&#xff09;&#xff0c;否则安装过程中会出错&#xff0c;提示“Intel VT-x处于禁…

写在2023年,回看10年前,很幸运进了软件测试这行~

首先介绍一下我自己&#xff0c;从事软件测试行业到现在是10年时间&#xff0c;毕业之后一直从事的软件测试行业。很幸运在毕业时赶上互联网这波浪潮&#xff0c;然后就一直在互联网公司工作&#xff0c;虽然那时候的软件测试技术发展还相对比较混乱&#xff0c;但自己因为公司…

CAN 报文字节排列顺序(Intel、Motorola_LSB、Motorola_MSB)

学习自记&#xff1a; 在定义CAN通信矩阵或制作dbc时&#xff0c;我们需要知道报文的字节排列顺序。字节的排列顺序有2种&#xff0c;一种是Intel的排列顺序&#xff0c;另一种是Motorola的排列顺序&#xff0c;就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的…

在conda环境中安装tensorflow和cuda

​ 不同版本的tensorflow官方提供的编译好的whl文件只对应一个cuda版本&#xff0c;这让需要tensorflow的不同版本时很麻烦。 我选择的方式是在conda中新建一个环境&#xff0c;在环境中安装需要的tensorflow和cudatoolkit。 这里假设已经安装好anaconda。 确定需要的tensorflo…