MySQL的索引(我把梦想卖了 换成了柴米油盐)

news2024/11/26 23:32:27

文章目录

  • 一、索引的概念
  • 二、索引的作用
    • 如何实现?
  • 三、索引的副作用
  • 四、创建索引的原则依据
    • 创建索引的依据
  • 五、索引的分类
  • 六、索引的增删改查
    • 1.创建索引
      • (1)创建普通索引
      • (2)创建唯一索引
      • (3)创建主键索引
      • (4)创建(唯一)组合索引
      • (5)创建和使用全文索引查询
    • 2.删除索引
    • 3.查看索引

一、索引的概念

索引:索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址

​ 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。

​ 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度

  • 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容

  • 索引是表中一列或者若干列值排序的方法

  • 建立索引的目的是加快对表中记录的查找或排序。

二、索引的作用

设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。

当表很大或查询涉及到多个表时

  • 使用索引可以成千上万倍地提高查询速度。

  • 可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本

  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。

  • 可以加快表与表之间的连接。

  • 在使用分组和排序时,可大大减少分组和排序的时间。

  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能。

如何实现?

没有索引的情况下,要查询某行数据,需要先扫描全表来定位某行数据有索引后会通过查找条件的字段值找到其索引对应的行数据的物理地址,然后根据物理地址访问相应的数据

三、索引的副作用

  • 索引需要占用额外的磁盘空间

对于MyISAM引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而 InnoDB 引擎的表数据文件本身就是索引文件。

  • 更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间

这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引

四、创建索引的原则依据

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

  • 表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。
  • 记录数超过300行的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。
  • 经常与其他表进行连接的表,在连接字段上应该建立索引。
  • 唯准一性太差的字段不适合建立索引。
  • 更新太频繁地字段不适合创建索引。经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
  • 在经常进行GROUP BY、ORDER BY的字段上建立索引;
    索引应该建在选择性高的字段上。
  • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。

创建索引的依据

1.表中的记录行数较多时,一般超过300行的表

2.表中的主键字段、外键字段、多表连接使用的字段,不常更新的字段、常出现在where、group、by、order by 子语句的字段、小字段

3.不建议唯一性较差的字段、更新太频繁的字段、大文本子段 上创建索引

五、索引的分类

1.普通索引:最基本的索引类型。没有唯一性之类的限制
2.唯一索引:索引列每个值都唯一(允许有空值),且添加唯一键时会自动创建唯一索引。
3.主键索引:就是主键 ,一个表只能有一个主键,主键字段的值不允许为NULL,也不允许重复。
4.组合索引:由多列组合的索引,可以做普通组合索引,唯一组合索引(多列组合的值不能重复,其中某个单列是可以重复的)。且需要满足最左原则,即使用 SELECT 语句查询时 WHERE 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
5.全文索引:适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。Mysql15.6 版本以前 FULLTEXT 索引仅可用于 MyISAM 引擎,在5.6版本之后 innoDB 引擎也支持FULLTEXT 索引。全文索引可以在CHAR、VARCHAR 或者 TEXT 类型的列上创建。

六、索引的增删改查

1.创建索引

(1)创建普通索引

法一:直接创建

CREATE INDEX 索引名 ON 表名 (字段名(数据类型长度));

在这里插入图片描述

法二:修改表结构

ALTER TABLE 表名 ADD INDEX 索引名 (字段名(数据类型长度));

法三:创建时指定索引

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,… ,INDEX 索引名 (字段名(数据类型长度));

在这里插入图片描述

(2)创建唯一索引

法一:直接创建

CREATE UNIQUE INDEX 索引名 ON 表名 (字段名(数据类型长度));

在这里插入图片描述

法二:修改表结构

ALTER TABLE 表名 ADD UNIQUE 索引名 (字段名(数据类型长度));

在这里插入图片描述

法三:创建唯一键自动生成

CREATE TABLE 表名 (字段1 数据类型 UNIQUE KEY,字段2 数据类型,… );

在这里插入图片描述

(3)创建主键索引

法一:修改表结构

ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

在这里插入图片描述

法二:创建表时指定主键

CREATE TABLE 表名 (字段1 数据类型 PRIMARY KEY,字段2 数据类型,… );

在这里插入图片描述

(4)创建(唯一)组合索引

法一:直接创建索引

CREATE INDEX 索引名 ON 表名 (字段1,字段2,…);
CREATE UNIQUE INDEX 索引名 ON 表名 (字段1,字段2,…); 唯一

在这里插入图片描述

法二:修改表结构

ALTER TABLE 表名 ADD INDEX 索引名 (字段名,字段2,…);

ALTER TABLE 表名 ADD UNIQUE 索引名 (字段名,字段2,…); 唯一组合索引

在这里插入图片描述

(5)创建和使用全文索引查询

法一:直接创建索引

CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名);

在这里插入图片描述

法二:修改表结构

ALTER TABLE 表名 ADD FULLTEXT 索引名 (字段名);

在这里插入图片描述

法三:创建表时指定全文索引

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,… ,FULLTEXT 索引名 (字段名);

在这里插入图片描述

使用全文索引查询

SELECT * FROM 表名 WHERE MATCH(适用字段) AGAINST(‘查询的内容’);

在这里插入图片描述

2.删除索引

DROP INDEX 索引名 ON 表名;

在这里插入图片描述

ALTER TABLE 表名 DROP INDEX 索引名;

在这里插入图片描述

3.查看索引

SHOW INDEX FROM 表名; 或 SHOW KEYS FROM 表名;

在这里插入图片描述

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

七、各字段使用索引种类的建议
举例:做会员信息数据管理

会员编号:作为主键,使用PRIMARY KEY;
会员姓名:如果要建索引的话,那么就是普通的 INDEX;
会员身份证号码,如果要建索引的话,那么可以选择UNIQUE(唯一的,不允许重复)会员备注信息,如果需要建索引的话,可以选择FULLTEXT,全文搜索。I
FULLTEXT用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
八、判断索引使用成功的方式
一般来说,使用索引查询会比未使用的查询速度快上千百倍,但我们如何知道查询时是否使用索引加快了查询速度呢?

使用 EXPLAIN 分析 SELECT 语句

EXPLAIN SELECT … FROM …

在这里插入图片描述

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

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

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

相关文章

Spring Boot进阶(51):Spring Boot项目如何集成 HTML?| 超级详细,建议收藏

1. 前言🔥 我们都知道,Spring Boot作为一款广泛应用于企业级的开发框架,其通过简化开发过程、提高开发效率赢得了众多开发者的青睐。在实际项目开发中,集成 HTML作为 Web 应用程序中的一个基本需求,也是现在极其常见的…

618最值得入手的数码产品有哪些?四款必入数码产品数码推荐

时间飞逝,不知不觉已经过了6月中旬,大家心心念念的618年中大促也即将迎来最后一波高潮。这次618大促各大品牌的优惠力度都非常可观,特别是数码产品类,可以说是今年最值得入手的时期。今天也为大家推荐几款高颜值数码好物&#xff…

在 Apple silicon Mac 上 DFU 模式修复或恢复 macOS 固件

搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS Ventura 请访问原文链接:https://sysin.org/blog/apple-silicon-mac-dfu/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Mac computers with Apple silicon&a…

聚焦2023数博会|高端对话,大咖观点精彩荟萃(上)

当前数据作为新型生产要素,是数字化、网络化、智能化的基础,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和社会治理方式。数据基础制度建设事关国家发展和安全大局。为加快构建数据基础制度&#…

【C++】手撕跳表

文章目录 跳表简介时间复杂度 代码实现节点类跳表类 源代码(附详细注释)参考 跳表 简介 跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是…

代码随想录二叉树 Java(三)

文章目录 (简单)501. 二叉搜索树中的众数(*中等)236. 二叉树的最近公共祖先(中等)235. 二叉搜索树的最近公共祖先(中等)701. 二叉搜索树中的插入操作(*中等)4…

软件测试中如何编写单元测试用例(白盒测试)

目录 前言: 一、 单元测试的概念 二、开始测试前的准备 三、开始测试 四、完成测试 前言: 单元测试是软件测试中一种重要的测试方法,它是在代码级别进行测试,通过对每个模块或功能进行独立测试来保障代码的正确性和可靠性。…

实验篇(7.2) 11. 站对站安全隧道 - 双方互相发起连接(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接,现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器,用来对集团总部进…

【探索 Kubernetes|容器基础进阶篇 系列 3】容器进程的文件系统

文章目录 系列文章目录👹 关于作者一、回顾二、容器进程的文件系统是什么样子的?rootfs一致性解决应用依赖关系解决复用性 三、OverlayFS 联合文件系统先决条件overlay2 驱动程序如何工作结构图探索含义-磁盘上的镜像层和容器层镜像层容器层 四、overlay…

动态规划dp —— 26.环绕字符串中唯一的子字符串

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置元素为结尾的所有的子串里面,有多少个在base中出现过 2.状态转移方程 dp[i] 等于什么 如果是单个字母的子串,肯定会在base中出现,所以…

一文详解!appium自动化测试

目录 前言: Appinum前置知识 Andriod SDK 元素获取—UI Automator adb命令实践 adb常用命令 小结 Package与Activity Activity页面布局元素 monkey简介 monkey事件 操作事件简介 monkey参数 事件类参数 约束类参数 调试类参数 Monkey参数应用综合案…

生成式AI - 关键技术历史和发展

✈️当谈及生成式人工智能(AI),我们进入了一个令人惊叹的领域,它不仅改变了我们与技术的互动方式,而且极大地推动了人工智能的发展。通过模仿人类创造力和想象力的能力,生成式AI引领着我们走向了全新的可能…

re模块

目录 ❤ 正则表达式 常用正则 字符组 字符 量词 ❤ 正则表达式的使用 . ^ $ * ? { } 字符集[][^] 分组 ()与 或 |[^] 转义符 \ 贪婪匹配 ❤ re模块 常量、属性 常用方法 re.co…

echarts图表 的X轴添加滚动条

1:原图 2:代码 dataZoom [{orient: horizontal,show: scoreShow,//控制滚动条显示隐藏realtime: true, //拖动滚动条时是否动态的更新图表数据height: 5, //滚动条高度start: 0, //滚动条开始位置(共6等份)end: this.endValue,//…

复杂业务系统的通用架构设计法则

一、什么是复杂系统 我们经常提到复杂系统,那么到底什么是复杂系统。我们看下维基的定义:复杂系统(英语:complex system),又称复合系统,是指由许多可能相互作用的组成成分所组成的系统。强调了…

Pytest教程__参数化(10)

pytest参数化有两种方式: mark的parametrize标记:pytest.mark.parametrize(变量名,变量值),其中变量值类型为列表、元组或其它可迭代对象。fixture的params参数:pytest.fixture(params变量值),其中变量值类…

Selenium元素定位方法大全

一、背景 作为当下最流行的web UI自动化测试工具,selenium是很多测试同学入门接触自动化测试时学习的第一个工具。想要自动化操作页面上的内容,元素定位是首先必须要学习的核心知识。 因此本文主要介绍selenium的几种最常用的元素定位方法,…

008、体系架构之SQL 执行流程

SQL 执行流程 读取的执行写入的执行DDL的执行SQL运算SQL解析和编译SQL 层架构SQL 运算分布式 SQL 运算SQL 层架构 读取的执行 元数据的读取 执行器从information_schema当总获取表的元数据信息(table meta),元数据的信息从内存中读取就可以了,因为已经缓存到了info…

Python抓取商品详情方法的几种方法比较

抓取商品详情的方法有很多种,以下是其中几种常见的方法及其优缺点: 1.使用requests库发送HTTP请求,然后解析HTML或JSON格式的数据: 优点:这种方法可以抓取几乎所有网站上的数据,支持GET和POST请求&#xff…

匿名内部类为什么泄漏,Lambda为什么不泄漏

作者:麦客奥德彪 在Android开发中,内存泄露发生的场景其实主要就两点,一是数据过大的问题,而是调用与被调用生命周期不一致问题,对于对象生命周期不一致导致的泄漏问题占90%,最常见的也不好分析的当属匿名内…