MySQL数据库——索引

news2024/12/28 4:40:35

MySQL数据库——索引

  • 一、索引基本常识
      • 1.索引的概念
      • 2.索引的作用
      • 3.创建索引的依据
  • 二、索引的分类
      • 1.普通索引
      • 2.唯一索引
      • 3.主键索引
      • 4.组合索引
      • 5.全文索引
  • 三、索引的查看与删除
      • 1.查看索引
      • 2.删除索引

一、索引基本常识

数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中的数据。

1.索引的概念

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

2.索引的作用

索引的优点

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

索引的副作用

  1. 索引需要占用额外的磁盘空间。
    对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而 InnoDB 引擎的表数据文件本身就是索引文件。(索引文件和数据文件是同一个)在插入和修改数据时要花费更多的时间、消耗更多性能,因为索引也要随之变动。

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

3.创建索引的依据

索引虽可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。

  1. 表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。
  2. 记录数超过300行(或500行)的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。(会影响IO和CPU的性能)
  3. 经常与其他表进行连接的表,在连接字段上应该建立索引。
  4. 唯一性太差的字段不适合建立索引。(因为字段值会有重复)
  5. 更新太频繁地字段不适合创建索引。
  6. 经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
  7. 在经常进行GROUP BY、ORDER BY的字段上建立索引。
  8. 索引应该建在选择性高的字段上。(即重复性低的字段)
  9. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。(大字段建索引会增加磁盘空间,而且搜索起来会影响性能)

二、索引的分类

从逻辑划分来看,索引的运用主要有五种,分别为:普通索引,唯一索引,主键索引,组合索引和全文索引(模糊索引)

1.普通索引

建立在普通字段上的索引,没有任何限制。

方式一:直接创建普通索引
CREATE INDEX 索引名 ON 表名 (列名(长度));

方式二:修改表结构的方式创建索引 
ALTER TABLE 表名 ADD INDEX 索引名(列名);

方法三:创建表时指定索引  
该方式一般不建议采用:在创建表的时候添加索引,会让插入数据变慢。

在这里插入图片描述

2.唯一索引

与普通索引类似,但区别是唯一索引列的每个值都唯一。 唯一索引 允许有空值,但是不允许有两个及其以上的空值(注意和主键不同)。
创建唯一键或者创建唯一索引都可实现。

方式一:直接创建唯一索引 
CREATE UNIQUE INDEX 索引名 ON 表名(字段名);

方式二:修改表结构的方式增加唯一键 
ALTER TABLE 表名 ADD UNIQUE 索引名(字段名);

方法三:添加唯一键,即为唯一索引 
alter table 表名 add unique key(字段);

方式四:创建表时指定索引 

在这里插入图片描述

3.主键索引

主键索引是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。一个表只能有一个主键,不允许有空值,且该字段为唯一值。 添加主键将自动创建主键索引。

方式一:创建表时添加主键 

方式二: 在现有表中添加主键
ALTER TABLE 表名 add primary key(字段名)

在这里插入图片描述

4.组合索引

组合索引(单列索引与多列索引):可以是单列上创建的索引,也可以是在多列上创建的索引。
需要满足最左原则,因为select 语句的where条件是依次从左往右执行的,所以在使用select 语句查询时where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

方法一:直接创建索引 
CREATE INDEX 索引名 on 表名(字段1,字段2,字段3);


方法二:修改表的方式创建索引 
alter table 表名 add index 索引名(字段1,字段2, ..., 字段n);

方法三:创建表的时候指定索引 


组合索引的使用方法
select */需求字段 from 表名 where 索引字段1=?  and 索引字段2=? and 索引字段3=? 

在这里插入图片描述
在这里插入图片描述

5.全文索引

全文索引(FULLTEXT):适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
在MySQL5.6版本以前FULLTEXT索引仅可用于MyISAM引擎,在5.6版本之后innodb 引擎也支持FULLTEXT 索引。
全文索引可以在CHAR、 VARCHAR 或者TEXT 类型的列上创建。
每个表一般只创建一个全文索引。
查询时只能匹配完整的单词/字符串。

方法一:直接创建索引 
`create fulltext index 索引名 on 表名 (字段);`

方式二: 修改表的方式创建索引
`alter table 表名 add fulltext 索引名 (字段);`

方法三:创建表时指定索引


全文索引在查询中使用方法 
`select * from 表名 where match(字段名) against(单词/字符串); `

在这里插入图片描述

三、索引的查看与删除

1.查看索引

show index from 表名;
show keys from 表名;

各字段的含义如下:

字段名含义
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用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment备注。

在这里插入图片描述

2.删除索引

直接删除索引
DROP INDEX 索引名 ON 表名;

修改表方式删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;

在这里插入图片描述

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

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

相关文章

OpenGL 深度测试

1.简介 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了信息,并且(通常)和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的&#xf…

6 从0开始学PyTorch | 构建模型、损失函数、广播机制

前面都在学一些PyTorch的基本操作,从这一节开始,真正进入到模型训练的环节了。原作者很贴心的一步步教我们实现训练步骤,并且还从一个最简单的例子出发,讲了优化方案。 宏观上的训练过程 image.png 当然这里所说的训练还没有到深…

vue进阶-vue-cli

CLI是Command-Line Interface,翻译为命令行界面,但是俗称脚手架。 Vue-CLI是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速搭建 Vue 开发环境以及对应的 webpack 配置。 vue项目相关文件以 .vue 为后缀,需要事先安装 N…

【LeetCode热题100】打卡第25天:柱状图中最大的矩形

文章目录 柱状图中最大的矩形⛅前言🔒题目🔑题解 柱状图中最大的矩形 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目&#xf…

GEE:绘制一个点的Landsat1985-2020年逐日NDVI时间序列折线图

作者:CSDN @ _养乐多_ 本文记录了在GoogleEarthEngine(GEE)平台上选择一个点,根据该点在时间段内所有有效像素值绘制折线图的代码。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 var roi = geometry Map.addLayer(roi, {color

6.15集合1 和 泛型

举例 1:中药店,每个抽屉外面贴着标签 举例 2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签 举例 3:家庭厨房中 集合 我们接下来要学习的内容是Java基础中一个很重要的部分:集合 1 Coll…

【服务器数据恢复】AIX下raid故障导致pool无法加载的数据恢复案例

服务器数据恢复环境: IBM P740小型机AIX操作系统Sybase数据库V7000存储。V7000存储配置了12块SAS机械硬盘(其中一块为热备盘)组建一组raid5磁盘阵列。存储设备一共创建了2组Mdisk,加到一个pool中。 服务器故障: IBM V…

网络管理与维护(三)网络安全

网络安全 网络安全威胁 非授权访问 信息泄漏 破坏数据完整性 拒绝服务攻击 利用网络传播病毒 安全服务和安全机制 总结 1.通常可以把网络信息安全的问题划分为物理层、网络层、数据层和内容层四个层面。 2.网络存在的威胁主要表现: 非授权访问、信息泄漏、破坏数…

基于Django+Vue开发的社区疫情管理系统(附源码)

基于Django、Django Rest framework、Vue的前后端分离的社区疫情管理系统。 一、系统功能 用户管理(只有管理员有权限) 用户注册用户登录修改用户信息删除用户修改密码权限管理 首页数据展示 国内疫情数据展示国内疫情新闻近30日的感染人数(…

【论文阅读】Adap-t: Adaptively Modulating Embedding Magnitude for Recommendation

【论文阅读】Adap-𝜏: Adaptively Modulating Embedding Magnitude for Recommendation 文章目录 【论文阅读】Adap-𝜏: Adaptively Modulating Embedding Magnitude for Recommendation1. 来源2. 介绍3. 模型解读3.1 准备工作3.1.1 任务说明3.1.2 基于嵌…

Linux:http服务(Apache 2.4.57)源码编译——配置网站 || 入门到入土

目录 1.下载源码包 2.配置httpd运行环境 3.编译源码包安装apache软件 4.优化执行路径 5.添加httpd系统服务 正文 1.httpd服务器的基本配置 2.本章持续更新 我的服务器为centos7系统 1.下载源码包 访问官方网站↓↓↓ Welcome! - The Apache HTTP Server Project ↑↑…

ONLYOFFICE Docs 7.4 版本大大增强了图形编辑功能!

ONLYOFFICE Docs 7.4 版本大大增强了图形编辑功能! 书接上文: 北冰洋汽水我的最爱https://mp.weixin.qq.com/s?__bizMzI2MjUyNzkyNw&mid2247493734&idx1&sn416c4ee5756ea59883591d3c2c4a6ae4&chksmea4b66bedd3cefa89050e25b661e0be16…

malloc 背后的虚拟内存 和 malloc实现原理

面试的时候经常会被问到 malloc 的实现。从操作系统层面来说,malloc 确实是考察面试者对操作系统底层的存储管理理解的一个很好的方式,涉及到虚拟内存、分页/分段等。下面逐个细说。 1. 虚拟内存 首先需要知道的是程序运行起来的话需要被加载的物理内存…

spark 和 flink 的对比

一、设计理念 Spark 的数据模型是 弹性分布式数据集 RDD(Resilient Distributed Dattsets),这个内存数据结构使得spark可以通过固定内存做大批量计算。初期的 Spark Streaming 是通过将数据流转成批 (micro-batches),即收集一段时间(time-window)内到达的…

【计算机组成原理】——知识点复习(期末不挂科版)

课本: 考试题型: 题型一、计算题(30分) 1、定点数表示:用原码、反码、补码、移码表示十进制数(5分) 2、浮点数表示:十进制数↔单精度浮点数(5分) 3、加减运…

行业报告 | AI+制造业赋能,机器视觉开启掘金新大陆(上)

原创 | 文 BFT机器人 01 核心要点 Al制造业赋能,META 发布 SAM 助力机器视觉迎来 GPT 时刻。 机器视觉技术使得工业设备能够“看到”它正在进行的操作并进行快速决策,完整机器视觉系统由硬件软件组成,分别进行成像和图像处理工作。 目前,以“…

全网超全,接口自动化测试实战总结详全,这几个阶段你知道吗?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口自动化根本目…

【深入浅出 Spring Security(十)】权限管理的概述和使用详情

权限管理 一、授权的核心概念二、权限管理策略权限表达式(SpEL Spring EL)1. 基于 URL 的权限管理(过滤器)基本用法 2. 基于 方法 的权限管理(AOP)EnableGlobalMethodSecurity基本用法 三、权限管理之版本问…

游戏中用脚开飞机实现方案

看看这个图片,有人用脚开飞机,用几个踏板去控制,在游戏中,开飞机的操作比较简单,上升,下降,加减油门,方向左,方向右。 android设备中,使用模拟点击就可以实现…

好用的电容笔有哪些推荐?apple pencil的平替笔测评

随着平板电脑在校园、办公室中的应用越来越广泛,需要一种具有良好性能的电容笔。苹果品牌原装的这支电容笔,虽然功能很强,但因为其的价格实在是太贵了,所以只是用来学习记笔记,实在是太浪费了。所以,哪个电…