MySQL索引概述

news/2024/11/17 3:51:14/

MySQL索引概述

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

索引分类

索引的出现其实就是为了提⾼数据查询的效率,索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结果。

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

索引分类

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

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

  3. 主键索引:使用PRIMARY KEY修饰的字段会自动创建索引(MyISAM,InnoDB)

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

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

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

索引创建和删除

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

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

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

create [unique] index 索引名 on 表名(属性名(length)[ASC | DESC];
create index nameidx on student(name);

也可以有多个列名构成索引(即,多列索引)

删除索引

drop index 索引名 on 表名;

查看索引

show create table student\G;

注意!!!

  1. 经常作为where条件过滤的字段考虑添加索引
  2. 字符串列创建索引时,尽量规定索引的长度,而不能让索引值的长度key_len过长
  3. 当SQL中索引字段涉及数据类型强转或MySQL函数调用,表达式计算等,索引就用不上了

索引的执行过程

explain查看执行过程
使用explain查看sql的执行计划,分析索引的执行过程。


http://www.ppmy.cn/news/59171.html

相关文章

探索三维世界【2】:Three.js 的 Texture 纹理

缤纷三维世界大揭秘:探索 Three.js 的 Texture 纹理 1、Texture纹理2、TextureLoader 纹理加载器2.1、创建纹理加载器2.2、纹理属性设置2.3、设置纹理渲染2.4、打光 3、完整代码与展示 1、Texture纹理 Texture 是 three.js 中的“纹理”概念。纹理是指将一张图像映…

Addictive Multiplicative in NN

特征交叉是特征工程中的重要环节,在以表格型(或结构化)数据为输入的建模中起到了很关键的作用。 特征交互的作用,一是尽可能挖掘对目标有效的模式、特征,二是具有较好的可解释性,三是能够将对数据的洞见引…

基于max30102的物联网病房监测系统(中断处理和主题逻辑)

目录 五、中断处理 六、主体框架 对采集数据的初始化 核心功能的实现 烟雾 通信帧格式 wifi接收数据的处理 OLED显示 五、中断处理 void SysTick_Handler(void) {TimingDelay_Decrement(); }void ESP8266_USART_INT_FUN(void) {uint8_t ucCh;if ( USART_GetITStatus (…

CSS(二)-- 选择器的运用(针对基本选择器和复合选择器的详细解析)

目录 1. 选择器的作用 2. 选择器的分类 3. 基本选择器 3.1 标签选择器 3.2 类选择器

手写【深拷贝】

JS中深拷贝的实现 JSON.parse(JSON.stringify())递归实现深拷贝 使用JSON.parse(JSON.stringify()) 实现 无法拷贝 函数、正则、时间格式、原型上的属性和方法等 递归实现深拷贝 es5实现深拷贝 源对象 const obj {name: 张桑,age: 18,hobby: [{name: 篮球,year: 5,loveSta…

Pinia入门-实现简单的用户状态管理

目录 一:pinia 是什么 二:pinia与vuex的区别 三:pinia的基本使用 3.1.安装 3.2.创建一个 pinia 实例 四:Pinia中的Store 4.1.什么是store 4.2.什么时候使用store 4.3.store的基本使用 4.4.state 4.5.getters 4.6.acti…

现代CMake高级教程 - 第 5 章:链接第三方库

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 5 章&#xff1a;链接第三方库 案例 使用 tbb 库 main.cpp #include <tbb/parallel_for.h> int main() {tbb::parallel_for(0, 4, [&] (int i){printf("hello, %d!\n", i);}) }直接链接 tbb …

【JS笔记】JS常见的事件、事件传播、事件解绑、事件委托、阻止事件冒泡、阻止默认行为、正则表达式

目录 一、JS事件 1.1、事件介绍 1.2、绑定和解绑事件 (1)绑定事件 (2)解绑事件