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

news2024/12/22 20:15:56

索引分类

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

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

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

相关文章

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时,会自动重定向到hostname.html 示例: 测试 版本的升级迭代,之前利用控制器进行滚动更新,在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…

猫头虎带您探索StringUtils3之StringUtils.isEmpty()和StringUtils.isBlank()的区别 ‍

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

低代码汹涌澎湃,真的是风口?

“中国的下一个风口是什么?低代码?你赞同吗?” 可以肯定的是,企业想站上未来产业的风口,”数字化“是必经之路。而低代码是企业向制高点突进的手段。产业的风口,就是产业发展的趋势,只有尽力站上…

SQL面试题挑战01:打折日期交叉问题

目录 问题:SQL解答:第一种方式:第二种方式: 问题: 如下为某平台的商品促销数据,字段含义分别为品牌名称、打折开始日期、打折结束日期,现在要计算每个品牌的打折销售天数(注意其中的…

JNI 注册

一、 JNI 静态注册 ① 在 Android 的 Java 层定义方法 : 在 MainActivity 类中定义 如下 Native 方法 ; public native String stringFromJNI();② Native 方法实现 : 下面是一个 Native 方法实现的示例 ; extern "C" JNIEXPORT jstring JNICALL Java_kim_hsl_jni_…

VuePress安装及使用——使用 Markdown 创建你自己的博客网站和电子书

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 四、使用主题1.安装2. 目录结构说明&…

fastjson反序列化 CVE-2017-18349

fastjson fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库,用于将数据在 Json 和 Java Object之间相互转换。它没有用java的序列化机制,而是自定义了一套序列化机制。 提供两个主要接口: JSON.toJSONString 和 JSON.parseObject/JSON.parse 分别实现序列化…

双指针——找到字符串中的所有字母异位词

https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envTypestudy-plan-v2&envIdtop-100-liked 双指针,每次都统计出来p长度的滑动窗口里的数字,拿Arrays.equals进行对比,然后滑动一小格,减1加1继续比对即可。 class Solut…

AngularJS

理解实现代码的逻辑为主要,代码怎么写为次要。 参考资料: 《AngularJS入门与进阶》,江荣波著 前端开发常用框架 React:由Facebook开发,用于构建用户界面的JavaScript库,以组件化和虚拟DOM著称。 Angular&…

Github项目推荐-30天Python教程

项目地址 GitHub - Asabeneh/30-Days-Of-Python 项目简述 这是一个非常棒的python入门教程,图文并茂,讲解清晰,十分值得推荐。 项目截图

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

删除win10服务

之前工作需要在我电脑上安装了一个天气的服务,我想删掉但是在任务管理器里删不掉,请教了大佬 删除方法是,在开始菜单里找到命令提示符 右键-以管理员方式打开命令提示符 输入sc 按enter键,可以查看一些操作命令 删除服务的话&a…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念: 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承,或者钻石继承 定义一个基类Animal,两个派生类Sheep、Camal,SheepCame继承于两个派生类 class Animal { public:int m_Age; }…

java-sec-code中命令注入

java-sec-code中命令注入 不安全的写法(由于我这里使用的是idea搭建的环境,原本命令执行的sh -c 无法运行,后续的输出也会产生乱码,修改部分代码,以便能更好的显示出效果,linux下使用docker木有问题) //需要导入的库文…

物流项目话术(1.5w字精选)

物流项目的分类 技术架构图(面试时面试官会要求你画出技术架构图) 功能结构图 业务功能流程 流程说明: 用户在【用户端】下单后,生成订单 系统会根据订单生成【取件任务】,快递员上门取件后成功后生成【运单】 用户对…

【leetcode203】移除链表元素【Java代码讲解】

12.18 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2&#xff…

算法设计与分析2023秋-头歌实验-实验七 动态规划

文章目录 第1关:数塔问题任务描述相关知识编程要求解题思路测试说明参考答案 第2关:最长公共子序列任务描述相关知识编程要求解题思路:测试说明参考答案 第3关:求序列-2 11 -4 13 -5 -2的最大子段和任务描述相关知识编程要求解题思…

单位委托保管档案好处在哪里

单位委托保管档案可以享受专业的管理、节省空间、提高效率、保护保密性和安全性,以及保证档案的长期保存等好处,从而提升工作效率和档案管理的质量。 具体而言,委托档案寄存专久智能保管档案的好处有以下几点: 1. 专业管理&#x…

数据结构之<树>的介绍

树的基本概念 在数据结构中,树(Tree)是一种层次结构,由节点和边组成。树的基本概念包括根节点、子节点、父节点、兄弟节点等。节点拥有零个或多个子节点,除了根节点外,每个节点有且仅有一个父节点。树的层…

Leetcode—128.最长连续序列【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—128.最长连续序列 实现代码 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> s;for(auto num: nums) {s.insert(num);}int longestNum 0;for(auto num: s) …