【SQL应知应会】索引(一)• MySQL版

请添加图片描述

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流

本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

请添加图片描述

索引 • MySQL版

  • 前言
  • 一、索引
  • 1.简介
    • 1.1 索引的优点
    • 1.2 索引的缺点
  • 2.创建
    • 2.1 索引类型之逻辑分类
      • 2.1.1普通索引(单列索引) 的创建
      • 2.1.2普通索引(单列索引) 的查看
      • 2.1.3 复合索引(组合索引)的创建
      • 2.1.4 复合索引(组合索引)的应用
        • 2.1.4.1 直接使用`select *`查询前面添加索引的表
        • 2.1.4.2 查询具体的字段
        • 2.1.4.3 遵循`最左前缀原则`,对复合索引中的索引字段`按照顺序`进行查询
        • 2.1.4.4 遵循`最左前缀原则`,对复合索引中的索引字段`不按照顺序`进行查询
        • 2.1.4.5 `不`遵循`最左前缀原则`,对复合索引中的索引字段进行查询
        • 2.1.4.6 in & not in
  • 小结

前言

✅今天开始SQL的索引的篇章,同样我们会讲到MySQL和Oracle的索引,大家拭目以待吧
✳️今天这篇主要简单介绍了索引的概念和优缺点,同时直接进入主题——如何创建索引,同时我们会针对索引进行一些分类,而今天讲的是按照逻辑分类后的普通索引(单列索引)以及复合索引,分别讲了索引的创建和应用
✴️文章中提供了代码和很具体的截图,希望大家跟着一起学起来
希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持
💻那么,快拿出你的电脑,跟着文章一起学习起来吧

一、索引

1.简介

  • 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

1.1 索引的优点

  • 索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。

  • 索引可以帮助服务器避免排序和创建临时表

  • 索引可以将随机IO变成顺序IO

  • 索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组,提高了表访问并发性

  • 关于InnoDB、索引和锁:InnoDB在二级索引上使用共享锁(读锁),但访问主键索引需要排他锁(写锁)

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

  • 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

  • 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

1.2 索引的缺点

  • 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加

  • 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大

  • 对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度

  • 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

  • 对于非常小的表,大部分情况下简单的全表扫描更高效

2.创建

2.1 索引类型之逻辑分类

2.1.1普通索引(单列索引) 的创建

  • 单列索引是最基本的索引,没有任何的限制

  • 方法1:直接创建索引

CREATE INDEX index_name ON table_name(col_name);
  • 方法2:修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name(col_name);
  • 方法3:创建表的时候同时创建索引
CREATE TABLE news (id int(11) NOT NULL AUTO_INCREMENT ,title varchar(255)  NOT NULL ,content varchar(255)  NULL ,time varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (id),  -- 默认使用B树索引INDEX index_name (title(255)) -- 默认使用B树索引
)

2.1.2普通索引(单列索引) 的查看

  • 可以通过show create table news 查看
CREATE TABLE `news` (`id` int NOT NULL AUTO_INCREMENT,`title` varchar(255) NOT NULL,`content` varchar(255) DEFAULT NULL,`time` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`),KEY `index_name` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
  • 也可以通过转储SQL文件进行查看

请添加图片描述

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for news
-- ----------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news`  (`id` int(0) NOT NULL AUTO_INCREMENT,`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `index_name`(`title`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

2.1.3 复合索引(组合索引)的创建

  • 复合索引是在多个字段上创建的索引
  • 复合索引遵守**“最左前缀”原则**,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。
  • 方法1:创建一个复合索引
create index index_name on table_name(col_name1,col_name2,...);
  • 方法2:按照修改表结构的方式添加索引
alter table table_name add index index_name(col_name,col_name2,...);
  • 方法3:直接使用工具(此处是Navicat)进行添加
    在这里插入图片描述

2.1.4 复合索引(组合索引)的应用

2.1.4.1 直接使用select *查询前面添加索引的表

  • 发现并没有使用到索引 ,而是全表扫描
explain
select * from emp

在这里插入图片描述

2.1.4.2 查询具体的字段

  • 使用到前面添加的复合索引,但是还是要扫描整个索引树
explain
select empno from emp

在这里插入图片描述

2.1.4.3 遵循最左前缀原则,对复合索引中的索引字段按照顺序进行查询

  • 我们发现查询都使用到了索引
explain
select * from emp where empno = '7499'

请添加图片描述

explain
select * from emp where empno = '7499' and ename = 'ALLEN'

请添加图片描述

explain
select * from emp where empno = '7499' and ename = 'ALLEN' and deptno = '30'

请添加图片描述

2.1.4.4 遵循最左前缀原则,对复合索引中的索引字段不按照顺序进行查询

  • 发现使用复合索引的第一个字段,与在SQL语句中的顺序无关
explain
select * from emp where ename = 'ALLEN' and deptno = '30' and empno = '7499' 

在这里插入图片描述

2.1.4.5 遵循最左前缀原则,对复合索引中的索引字段进行查询

  • 发现并没有使用到索引
explain
select * from emp where ename = 'ALLEN' and deptno = '30'

在这里插入图片描述

2.1.4.6 in & not in

  • where in 也会用到索引
explain
select * from emp where empno in (7499,7521)

请添加图片描述

  • not in 没有in的效率高
explain
select * from emp where empno not in (7499,7521)

请添加图片描述

小结

😘感谢大家耐心的看完这篇文章,这篇文章是MySQL索引的第1篇文章,我们在MySQL方面写了很多内容了,大家可以去我的专栏SQL应知应会 进行学习,如果大家觉着还算可以,那么就给个三连支持一下吧
🏡也可以加入我的社区一起学习呀
✅如果想要继续关注和学习后续更多的内容,那就关注一下爱书不爱输的程序猿吧,当然,如果大家还有什么其他方面的知识点想要看,可以在评论区或者私信我

请添加图片描述

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

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

相关文章

Dockerfile部署golang,docker-compose

使用go镜像打包,运行在容器内 redis和mysql用外部的 项目目录结构 w1go项目: Dockerfile # 这种方式是docker项目加上 本地的mysql和redis环境 # go打包的容器 FROM golang:alpine AS builder# 为我们镜像设置一些必要的环境变量 ENV GO111MODULEon …

音视频技术开发周刊 | 305

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 大神回归学界:何恺明宣布加入 MIT 「作为一位 FAIR 研究科学家,我将于 2024 年加入麻省理工学院(MIT)电气工程与计算机科学…

国联易安网页防篡改保护系统“渠道招募”启动啦!

作为业内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全的领军企业,国联易安网页防篡改保护系统基于“高效同步”、“安全传输”两项技术,具备了独特的“五重防护”新特性,支持网页的全自动发布、网页监控、报警和自…

P1993 小 K 的农场(差分约束)(内附封面)

小 K 的农场 题目描述 小 K 在 MC 里面建立很多很多的农场,总共 n n n 个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m m m 个),以下列三种形式描述:…

Win7之MS12-020死亡蓝屏

一,何为死亡蓝屏 1,简介 死亡蓝屏利用RDP协议,基于3389远程桌面端口对目标主机进行攻击,使目标机系统瘫痪导致蓝屏,严重影响着计算机的正常使用。 2,条件 1>目标操作系统未开启防火墙和杀毒软件等 2&g…

API接口用例生成器

一、前言 随着自动化测试技术的普及,已经有很多公司或项目,多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主,接口用例采用 Excel 进行维护,按照既定的接口用例编写规则,对于功能测试人员来说只…

element表格+表单+表单验证结合运用

目录​​​​​​​ 一、结果展示 二、实现代码 一、结果展示 1、图片 2、描述 table中放form表单,放输入框或下拉框或多选框等; 点击添加按钮,首先验证表单,如果存在没填的就验证提醒,都填了就向下添加一行表单表…

GATK BaseRecalibratorSpark 过程中因Too many open files终止

Error: GATK BaseRecalibratorSpark 过程中因Too many open files终止 执行命令: nohup time ./gatk --java-options "-Xmx16G" BaseRecalibratorSpark -R ../../alignment/hg38/hg38.fa -I ../../alignment/bam/P368T.sorted.markdup.bam …

JDK动态代理原理

本文主要讲解下JDK动态代理的实现原理&#xff0c;其基本使用如下&#xff1a; // 实例化自定义调用处理器实例 InvocationHandler handler new MyInvocationHandler(...); // 获取代理对象方式一 Class<?> proxyClass Proxy.getProxyClass(Foo.class.getClassLoade…

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的&#xff1b;但是要注意对象的结构! 因为这涉及到编辑完成后&#xff0c;表单提交时候的 校验&#xff01; 是校验每一个select tree里边 是否勾选 2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tr…

ChatGPT超详细介绍与功能与免费网页版(超全面!)

ChatGPT ChatGPT前言ChatGPT介绍ChatGPT的优点关于ChatGPT的一些问题1.chatgpt是什么意思?2.chatgpt国内能用吗? 国内可用的ChatGPT网页版&#xff1a;1.ChatGPT prompts2.这个网站收集了5000多个ChatGPT 应用&#xff0c;可以在线运行3.ChatGPT Box4.飞书chatgpt5.AI-Produc…

matplotlib库的用法——各种图的绘制

matplotlib是一个流行的Python绘图库&#xff0c;用于创建各种静态、动态、交互式可视化。以下是一些基本的用法&#xff1a; 线图 plt.plot([1, 2, 3, 4]) plt.ylabel(Some Numbers) plt.show()散点图 x [1,2,3,4,5] y [2,3,4,5,6] plt.scatter(x, y) plt.show() 条形图 …

sklearn中使用决策树

1.示例 criterion可以是信息熵&#xff0c;entropy&#xff0c;可以是基尼系数gini # -*-coding:utf-8-*- from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split wineload_wine()# print ( wine.feature_…

【2.3】Java微服务:sentinel服务哨兵

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a;Java微服务 ✨特色专栏&#xff1a; 知识分享 &…

uniapp 微信小程序 判断数据返回的是jpg还是pdf,以及pdf预览

<template> <view class"approval-notice"><block v-for"(imgItem, idx) in drivingLicense" :key"idx">//如果是非图片&#xff0c;那就走pdf预览<view class"pdf-item" v-if"Object.keys(thumbnail).incl…

css-3:什么是响应式设计?响应式的原理是什么?如何做?

1、响应式设计是什么&#xff1f; 响应式网站设计&#xff08;Responsive WEB desgin&#xff09;是一个网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境&#xff08;系统平台、屏幕尺寸、屏幕定向等&#xff09;进行相应的相应和调整。 描述响应式…

ensp与虚拟机搭建测试环境

1.虚拟机配置 ①首先确定VMnet8 IP地址&#xff0c;若要修改IP地址&#xff0c;保证在启动Ensp前操作 ②尽量保证NAT模式 2.ensp配置 (1)拓扑结构 (2)Cloud配置 ①首先点击 绑定信息 UDP → 增加 ②然后点击 绑定信息 VMware ... → 增加 ③最后在 端口映射设置上点击双向通…

Hive创建外部表详细步骤

① 在hive中执行HDFS命令&#xff1a;创建/data目录 hive命令终端输入&#xff1a; hive> dfs -mkdir -p /data; 或者在linux命令终端输入&#xff1a; hdfs dfs -mkdir -p /data; ② 在hive中执行HDFS命令&#xff1a;上传/emp.txt至HDFS的data目录下&#xff0c;并命名为…

vue3+vue-i18n 监听语言的切换

最近在用 vue3 做一个后台管理系统&#xff0c;之前是只考虑中文&#xff0c;现在加了个需求是多语言。 本来也不是太难的需求&#xff0c;但是我用的并不熟悉&#xff0c;并且除了页面展示不同的语言&#xff0c;需求是在切换语言的时候在几个页面中需要做出一些自定义的行为&…

Openharmony重要特性之一浅析分布式软总线

OH分布式软总线 概述 简介分布式软总线的特征官方说明目录结构与代码说明分布式软总线使用 使用说明接口说明发现 发现的接口C++示例说明组网 组网的接口C++示例说明传输 软总线传输关键流程传输的接口注意事项一、概述 1.1 简介 ​ 分布式软总线能做什么? ​ 1.1 通过共享一…