当前位置: 首页 > news >正文

MYSQL(索引篇)

一、什么是索引

索引是一种数据结构,它用来帮助MYSQL更高效的获取数据

采用索引可以提高数据检索的效率,降低IO成本

通过索引对数据排序,降低数据排序成本,降低CPU消耗

常见的有:B树索引、B+树索引、哈希索引。其中InnoDB引擎采用的是B+数索引

二、索引的底层是什么 

MYSQL默认使用InnoDB存储引擎, 在InnoDB下的索引底层采用B+树数据结构存储引擎。

选用B+树主要有三个原因:

  • B+树对比B树更“矮胖”,阶数少,路径低,其扫描效率更高
  • B+树的读写代价低,非叶子节点只存放指针,叶子节点存放数据。mysql一页的大小是固定16kb的,对比B树的节点同时存放指针和数据,它可以存放更多的指针,一次性读取的数据量更多。
  • B+树的叶子节点通过双向链表维护,范围查找、排序查找、区间查找能力优秀

三、B+树和B树区别 

一、在B树中,非叶子节点和叶子节点都会存储数据,而B+树的数据只存放在叶子节点,非叶子节点只存放指针,查询效率更稳定

二、在范围查找时效率更高,B+树的数据都在叶子节存储,叶子节点之间通过双向链表维护

四、什么是聚集索引和非聚集索引 

聚集索引:索引和数据放在一块,b+数的叶子节点保存了整行数据,有且只有一个,一般情况用主键作为聚集索引

非聚集索引:索引和数据分开存储,b+数的叶子节点保存对应主键,可以有多个。一般自定义的索引都是非聚集索引

五、什么是回表查询 

回表的意思就是一次查询没有获得我们所需要的全部数据,可能只通过二级索引获得了主键值,需要使用该主键值回到聚集索引中重新查询到所有数据。

为避免回表,可以采用覆盖索引或者在聚集索引列上进行查询 

 六、什么是覆盖索引

覆盖索引:在select查询中,返回的数据在索引列上可以全部找到。比如我们通过id聚集索引进行查询,它的叶子节点上保存了整行数据,可以一次查询全部返回,查询效率高。

而如果所需返回的数据有部分不在索引列上,就可能触发回表机制。为了避免,查询时尽量不要使用select *,尽量在返回列中都包含添加索引的字段。 

七、怎么处理超大分页 

超大分页一般都是在数据量比较大时,我们使用了limit分页查 询,并且需要对数据进行排序,这个时候效率就很低,我们可以采用覆盖索 引和子查询来解决先分页查询数据的id字段,确定了id之后,再用子查询来过滤,只查询这个 id列表中的数据就可以了 因为查询id的时候,走的覆盖索引,所以效率可以提升很多
 

八、创建索引的原则 

一般选择读的写少的字段创建索引。

尽量选择复合索引,一条sql的返回值尽量使用覆盖索引

较长的字段可以采用前缀索引 

相关文章:

MYSQL(索引篇)

一、什么是索引 索引是一种数据结构,它用来帮助MYSQL更高效的获取数据 采用索引可以提高数据检索的效率,降低IO成本 通过索引对数据排序,降低数据排序成本,降低CPU消耗 常见的有:B树索引、B树索引、哈希索引。其中Inno…...

Java API访问HDFS

一、下载IDEA 下载地址:https://www.jetbrains.com/idea/download/?sectionwindows#sectionwindows 拉到下面使用免费的IC版本即可。 运行下载下来的exe文件,注意安装路径最好不要安装到C盘,可以改成其他盘,其他选项按需勾选即可…...

高三高考免费试卷真题押题知识点合集

发表于安徽 温馨提示:有需要的真题试卷可联系本人,百卷内上免费资源。 感觉有用的下方三连,谢谢 ​ 。 免费版卷有6-60卷每卷平均4-30页 高三免费高三地理高三英语高三化学高三物理高三语文高三历史高三政治高三数学高三生物 付费版卷有1…...

css 计算函数属性:calc() 不起效 原因

踩坑:注意事项(- 减号或加号前后需要空格!!!) calc(100% - 251px); 这里错误写法中-两边没加空格,导致width不生效。但并不是所有运算符间都需要加空格,只有 和 - 需要加空格,因为运算允许负…...

2、TB6600驱动器介绍【51单片机控制步进电机-TB6600系列】

摘要:本节介绍TB6600驱动器界面及关键参数设置 一、驱动器功能界面 二、关键参数 输入电压:DC9-42V 输出电流:0.5-4A 最大功耗:160W 细分设置:1,2/A,2/B,4,8,16,32 工作温度:-10~45C 信号口驱动电流&…...

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…...

vue+Fullcalendar

vueFullcalendar: vueFullcalendar项目代码https://gitee.com/Oyxgen404/vue--fullcalendar.git...

Spring定时任务+webSocket实现定时给指定用户发送消息

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之…...

C语言学习笔记(六):数组(1)

0,问题的引入 怎么保存一个学生的成绩 float a; 怎么保存一个班(10人)的学生的成绩 float a,b,c,d......; float a1,a2,a3,........; 这样太麻烦了 -》“数组” 1,数组 什么是数组&#xff…...

apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】

往期教程: apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 这次实例演示下如何更换apk安装后的桌面图标图片。其实这个步骤前面我有一个教程贴。这次针对步骤做个补…...

【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: Serializable接口为什么…...

san.js源码解读之模版解析(parseTemplate)篇——readIdent函数

一、源码分析 /*** 读取ident* 这里的 ident 指标识符(identifier),也就是通常意义上的变量名* 这里默认的变量名规则为:由美元符号($)、数字、字母或者下划线(_)构成的字符串** inner* param {Walker} walker 源码读取对象* return {string}*/ functio…...

【excel技巧】excel单元格内如何换行?

Excel表格,在制作完成之后,在输入数据的时候,总是会遇到内容长度太长导致无法全部显示或者破坏表格整体格式。几天分享4个单元格换行的方法给大家。 方法一: 首先我们先介绍一个,通过调整列宽的方式来达到显示全部内…...

SSD1306 oled显示屏的驱动SPI接口

有IIC接口 和SPI接口 还有8080,6080接口等 arduino SPI接口 直接使用u8g2库实现 //U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock*/ 13, /* data*/ 11, /* cs*/ 10, /* dc*/ 9, /* reset*/ 8); asrpro(SPI接口按下方修改,IIC接口官方有驱动&…...

RSA:基于小加密指数的攻击方式与思维技巧

目录 目录 目录 零、前言 一、小加密指数爆破 [FSCTF]RSA签到 思路: 二、基于小加密指数的有限域开根 [NCTF 2019]easyRSA 思路: 三、基于小加密指数的CRT [0CTF 2016] rsa 思路: 零、前言 最近,发现自己做题思路比较…...

Vuex 和 Redux 的区别?

Vuex和Redux是两个流行的JavaScript状态管理库,它们有一些相似之处,但也有一些区别。 区别: 语言:Vuex是为Vue.js框架设计的,而Redux是一个独立的库,可用于多种JavaScript框架或库。生态系统:…...

软考高级系统架构师冲关预测

[ – 2023年10月27日 – ] 去年11月通过了软考高级系统架构师的考试,原本想立即分享下过关的总结回顾,但是随着软考新版大纲及教程的发布,也意味着题目及内容的复盘总结经验便不那么适用。在即将迎来今年的软考高架的时候,想着透…...

华为实验基础(1):交换机基础

一、交换机的分类 1、 根据交换方式划分: 存储转发式交换 (Store and Forward) 直通式交换 (Cut-through) 碎片过滤式交换 (Fragment Free) 2、 根据交换的协议层划分: 第二层交换:根据 MAC 地址进行交换 第三层交换&…...

bitlocker 加密锁定的固态硬盘,更换到别的电脑上,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥

环境: Win11 专业版 联想E14笔记本 512G ssd 问题描述: 一台笔记本因充电故障,需要拿去维修,不想重装系统,将bitlocker 加密锁定的固态硬盘拆下更换到别的笔记本电脑上,现在开机要手动填密钥,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥和之前那台电脑一…...

C语言之错误处理

在C语言中,错误处理是一种重要的编程技术,用于处理程序运行过程中可能出现的错误情况。C语言提供了几种处理错误的机制,包括返回错误码、使用全局变量、异常处理等。 1、返回错误码: 在函数执行过程中,如果发生错误&a…...

Nmap零基础实战:从安装配置到渗透测试全流程解析

1. 别再被“零基础”三个字骗了:Nmap不是点开就用的玩具,而是你第一把真正能切开网络的手术刀很多人点开“渗透测试零基础入门”这类标题,心里想的是:“装个软件,敲几行命令,扫出一堆IP和端口,就…...

HS2-HF_Patch:终极汉化与优化补丁完全指南

HS2-HF_Patch:终极汉化与优化补丁完全指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日语界面烦恼吗?HS2-H…...

JiYuTrainer终极指南:轻松破解极域电子教室限制,重获学习自主权

JiYuTrainer终极指南:轻松破解极域电子教室限制,重获学习自主权 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在学校的计算机教室里&#xff0c…...

Heightmapper:零代码创作3D地形,5分钟从地图到模型的神器

Heightmapper:零代码创作3D地形,5分钟从地图到模型的神器 【免费下载链接】heightmapper interactive heightmaps from terrain data 项目地址: https://gitcode.com/gh_mirrors/he/heightmapper 还在为3D地形建模发愁吗?Heightmapper…...

终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析

终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 在Windows系统开发与安全研究领域,DLL注入技术一直是连接应用程序与系统底层的关键桥…...

基于强化学习与LLM的在线讨论不当言论自动改写技术

1. 项目概述与核心挑战 在社交媒体和在线论坛上,我们每天都能看到海量的讨论。其中,不乏一些言辞激烈、充满攻击性或者逻辑混乱的“不当言论”。传统的平台治理手段,比如关键词过滤、基于分类器的自动检测加上人工审核,更像是一个…...

5步掌握Poppler-Windows部署:解决Windows环境PDF处理难题

5步掌握Poppler-Windows部署:解决Windows环境PDF处理难题 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 对于需要在Windows平台进行PD…...

AI产业到底包括哪些

AI 产业是一条从能源 / 材料→算力基建→数据→算法框架→大模型→平台服务→行业应用→终端与具身智能的完整长链,每一层环环相扣、层层驱动。下面从头到尾完整描述。一、最底层:能源与基础材料(产业根基)AI 是极度耗能的产业&am…...

分子动力学降维:空间学习技术从构型数据中提取慢变量

1. 项目概述:从“看热闹”到“看门道”的动力学降维在分子动力学模拟的世界里,我们常常面对一个令人头疼的“维度诅咒”。想象一下,你要研究一个蛋白质如何从一条松散的链折叠成具有特定功能的精密三维结构。这个系统可能包含成千上万个原子&…...

C#实现ASCII和字符串相互转换的代码示例

知识点 string 1 Stirng.Empty 表示空字符串。 此字段为只读。此字段的值为零长度字符串“”。string为引用数据类型。会在内存的栈和堆上分配存储空间。因此string.Empty与“”都会在栈上保存一个地址,这个地址占4字节,指向内存堆中的某个长度为0的空间&#xf…...