【MySQL】Sql优化之索引的使用方式(145)

索引分类

1.单值索引
单的意思就是单列的值,比如说有一张数据库表,表内有三个字段,分别是 id name numberNo,我给name 这个字段加一个索引,这就是单值索引,因为只有name 这一列是索引;

一个表可以有多个单值索引,我不光可以设置name ,我也可以把numberNo设置成索引,或许更多;

2.唯一索引
顾名思义,就是不能重复,比如age就不能被设置为唯一索引,因为年龄肯定是不唯一的,小明18岁,有可能小李也是18岁,这就重复了,所以age这一列不能被设置成唯一索引;

一般唯一索引就是Id;

3.复合索引
由多个列构成,相当于书的二级目录,比如我找“小敏”,它就先去X里面找,然后再去xiao里面去找,找两次;

这个时候我把name跟numberNo它两个共同组成一个复合索引,意思就是,我先根据name找人,如果名字重复了,我再根据numberNo去找;

复合索引不一定必须两个列在一起使用,比如找小婷,这个表里面就一个小婷,就没有必要再去找numberNo进行筛选;

如图:表:student_data

在这里插入图片描述
创建索引的方式一:
语法:careate 索引类型 索引名 on 表 (字段)

1.创建单值索引:单值索引索引类型就是index;
CREATE INDEX name_index ON student_data(NAME)

1.1查看索引:
SHOW INDEX FROM student_data
在这里插入图片描述
2.创建唯一索引:创建的该字段值必须唯一
CREATE UNIQUE INDEX numberNo_index ON student_data(numberNo)

讲解:unique 与 index 都是索引类型,这里我们就假设name是唯一的,创建方法跟上面一样,无非就多加了一个unique,去掉unique就是单值索引;

3.创建复合索引
CREATE INDEX name_numberNo_index ON student_data(NAME,numberNo)
//程序会自动检测,如果你后面参数只有一个,那就判定你为单值,如果是一个以上,就判定你是复合!

3.1 查看索引:
SHOW INDEX FROM student_data在这里插入图片描述

3.2查看索引执行计划:EXPLAIN 在这里插入图片描述
4.删除索引:
DROP INDEX name_index ON student_data

5.查看索引:
SHOW INDEX FROM student_data
在这里插入图片描述
SQL性能问题
1.分析SQSL的执行计划:EXPLAIN
通过explain,可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的状况;
查询执行计划:explain+SQL语句;
EXPLAIN SELECT * FROM student_data
在这里插入图片描述
id:顾名思义就是查询编号

select_type:查询类型

table:你在操作哪一张表

type:类型

key:实际使用的索引,你到底用了哪些索引

possible_keys:预测你用到了哪些索引,假设你用了八个索引,它这里就会显示八个,但是实际有效的只有五个,所以在key显示就是五个!

key_len:实际使用索引的长度;

ref:表和表之间的引用关系;

rows:通过索引查询到的数据量;

Extra:额外的优化信息

创建索引的方式二:

语法:alter table 表名 索引类型 索引名(字段)
1.创建单值索引
ALTER TABLE student_data ADD INDEX name_index(NAME);
查看索引
SHOW INDEX FROM student_data
在这里插入图片描述
2.创建唯一索引
ALTER TABLE student_data ADD UNIQUE INDEX numberNo_index(numberNo)
讲解:照猫画虎,跟上放基本一致,假设numberNo字段是唯一不可重复

3.创建复合索引
ALTER TABLE student_data ADD INDEX name_numberNo_index(NAME,numberNo)

讲解:先NAME就是先根据NAME查,再去根据numberNo查,这个顺序是有意义的!
值得注意的是,两个创建方式的效果是一样的,任选其一,均不需要事物的提交(commit),因为两者都是DDL语句,程序遇到DDL会自动提交,但是你写了也不报错,就是什么也没提交而已;
事物只对DML语句进行操作,也就是增删改操作,这个需要理解!

注意:

如果一个字段是primary key(主键),则该字段默认就是主键索引,即便你没有给他加索引,他也是主键索引!

主键索引与唯一索引基本相似,区别就是,值不能为Null,而唯一索引可以!

主键索引:值不能重复 值不能为null

唯一索引:值不能重复 值可以为null

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 23:12:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 23:12:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 23:12:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 23:12:02       18 阅读

热门阅读

  1. 楼宇对讲门铃的芯片构成分析

    2023-12-22 23:12:02       37 阅读
  2. 代码随想录 279. 完全平方数

    2023-12-22 23:12:02       34 阅读
  3. 详解Qml的底层实现

    2023-12-22 23:12:02       33 阅读
  4. 人像美肤 人体美型 CVPR 2022 ABPN

    2023-12-22 23:12:02       38 阅读
  5. LeetCode 2866. 美丽塔 II

    2023-12-22 23:12:02       42 阅读
  6. RAG框架LlamaIndex核心——各种索引应用分析

    2023-12-22 23:12:02       32 阅读
  7. 【Qt之Quick模块】4. QML语法格式及命名规范

    2023-12-22 23:12:02       27 阅读
  8. 【Vue3】watch监听的五种情况

    2023-12-22 23:12:02       40 阅读
  9. Ubuntu 22.04 系统创建用户并授权sudo权限

    2023-12-22 23:12:02       44 阅读
  10. 在vue中使用axios发送请求

    2023-12-22 23:12:02       37 阅读