MySQL -- 索引

ops/2024/11/17 21:20:46/

当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此 时就需要用索引来加速SQL查询。 由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多, 使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率,适得其反,因此 掌握良好的索引创建原则非常重要。

1.索引分类

索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结果。索引的核心是提高查询的速度

物理上(聚集索引&非聚集索引)/逻辑上(...)

索引的优点: 提高查询效率

索引的缺点: 索引并非越多越好,过多的索引会导致CPU使用率居高不下,由于数据的改变,会造成索引文件的改动,过多的磁盘I/O造成CPU负荷太重

1、普通索引:没有任何限制条件,可以给任何类型的字段创建普通索引(创建新表&已创建表,数量是 不限的,一张表的一次sql查询只能用一个索引 where a=1 and b='M')

2、唯一性索引:使用UNIQUE修饰的字段,值不能够重复,主键索引就隶属于唯一性索引

3、主键索引:使用Primary Key修饰的字段会自动创建索引(MyISAM, InnoDB)

4、单列索引:在一个字段上创建索引

5、多列索引:在表的多个字段上创建索引 (uid+cid,多列索引必须使用到第一个列,才能用到多列索 引,否则索引用不上)

6、全文索引:使用FULLTEXT参数可以设置全文索引,只支持CHAR,VARCHAR和TEXT类型的字段 上,常用于数据量较大的字符串类型上,可以提高查询速度(线上项目支持专门的搜索功能,给后台服务 器增加专门的搜索引擎支持快速高校的搜索 elasticsearch 简称es C++开源的搜索引擎 搜狗的 workflow)

2.索引创建和删除

创建表的时候指定索引字段:

CREATE TABLE index1(id INT,
name VARCHAR(20),
sex ENUM('male', 'female'),
INDEX(id,name);

在已经创建的表上添加索引:

CREATE [UNIQUE] INDEX 索引名 ON 表名(属性名(length) [ASC | DESC]);

删除索引:

DROP INDEX 索引名 ON 表名;

1.经常作为where条件过滤的字段考虑添加索引

2.字符串列创建索引时,尽量规定索引的长度,而不能让索引值的长度key_len过长

3.索引字段涉及类型强转、mysql函数调用、表达式计算等,索引就用不上了

create index nameidx on student(name);

 未创建索引时,搜索

 创建索引后,搜索

 未创建索引时

创建索引

创建索引后查询

 

 索引字段涉及类型强转、mysql函数调用、表达式计算等,索引就用不上了(我们使用SQL时用的是int 1000000,而password是varchar,涉及类型强转)

改为字符串类型‘1000000’不涉及类型强转,速度明显提升

加索引后,只扫描一行


http://www.ppmy.cn/ops/47366.html

相关文章

学习串口屏需要了解哪些方面的知识

学习串口屏需要掌握的知识主要包括以下几个方面: 串口通信原理:串口屏是基于串口通信的显示控制模组,因此了解串口通信的基本原理和通信协议是必要的。你需要了解串口通信的基本概念、数据格式、波特率、校验位等参数,以及串口通…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具: 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘(小白128G足够,装Ubuntu系统) 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍: Rufus 是一款格式化和创建 USB 启动盘的辅助工…

外贸实战|做外贸要主动,才会跟客户有订单!

很多人对我说过这种情况:客户给我发了一份询盘,但是我回复以后,客户就不理我了,好伤心。 我问:你跟了多久了? 很多人都会回答:几天或者不记得,他不理我,我也不知道怎么…

多功能光时域反射仪的工作原理

6426A-2101多功能光时域反射仪是新一代掌上型智能化光纤通信测量仪器,具有强大的功能和广泛的应用领域。它能够显示光纤及光缆的损耗分布曲线图,测量光纤及光缆的多种关键参数,包括长度、损耗、接续质量等,为光纤通信系统的工程施…

【数据结构】二叉树:简约和复杂的交织之美

专栏引入: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累…

Vue2 + Element UI 封装 Table 递归多层级列表头动态

注&#xff1a;此功能改为独立模块直接拿代码就可以使用。 1、在 components 中创建 HeaderTable 文件夹&#xff0c;在创建 ColumnItem.vue 和 index.vue。 如下&#xff1a; 2、index.vue 代码内容&#xff0c;如下&#xff1a; <template><div><div class…

关于django的一些基础问答

1. Django 和 Tornado 的关系 Django 是一个功能强大、全面且高度规范化的 Web 框架&#xff0c;它提供了丰富的内置功能和工具&#xff0c;适合构建复杂的 Web 应用。注重快速开发、代码组织和安全性。 Tornado 则是一个注重高性能和异步处理的 Web 框架。它特别适合处理高并发…

在HTML中写入JavaScript

在网站中添加JavaScript代码是为了增加页面的交互性。这可以通过直接在HTML文件中写入JavaScript代码&#xff0c;或者通过引入外部JavaScript文件来实现。下面我将详细说明这两种方法。 直接在HTML中写入JavaScript 这种方法简单直接&#xff0c;适合用于快速测试或添加少量的…