当前位置: 首页 > 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…...

OpenClaw 接入微信,QQ,飞书的正确方法-周红伟

OpenClaw 接入微信 OpenClaw(原 Clawdbot)是一个开源、本地优先的 AI 代理网关,能让大模型在你的电脑/服务器上 7X24 小时运行,支持直接操作电脑、浏览网页、执行命令,还能无缝接入飞书、Telegram、Discord 等聊天平台…...

别再乱开槽了!手把手教你用HFSS仿真设计一个带Wi-Fi陷波的超宽带天线

别再乱开槽了!手把手教你用HFSS仿真设计一个带Wi-Fi陷波的超宽带天线 在射频工程实践中,超宽带天线设计常面临一个棘手问题:如何在不影响整体性能的前提下,精准抑制特定干扰频段。以2.4GHz Wi-Fi频段为例,当它与其他通…...

UPnP_Generic库:嵌入式设备自动端口映射实战指南

1. UPnP_Generic库深度技术解析:嵌入式设备自动端口映射的工程实践1.1 为什么嵌入式开发者需要UPnP_Generic库在嵌入式物联网项目中,当设备需要从公网访问本地Web服务(如传感器数据页面、远程控制接口或OTA升级服务器)时&#xff…...

从 Linux 后端到机器人系统:核心能力迁移与技术实践

摘要: 机器人系统工程师是当前人工智能与自动化浪潮中的关键角色。该职位要求工程师不仅具备扎实的传统软件工程功底,还需深刻理解机器人系统的特殊性与复杂性。本文基于一份典型的机器人系统工程师职位描述,深入探讨了其核心能力要求、技术栈构成、系统设计思想、实际开发挑…...

ATmega328P ADC底层控制库:精度、功耗与实时性深度优化

1. 项目概述AnalogControlPanel(ACP)是一个专为ATmega328P系列Arduino平台(Uno、Nano、Pro Mini)设计的底层ADC控制库。它并非替代analogRead()的简易封装,而是一套面向嵌入式工程师的、对AVR片上模数转换器&#xff0…...

为什么选择Titanium SDK?5大优势让你告别原生开发复杂性

为什么选择Titanium SDK?5大优势让你告别原生开发复杂性 【免费下载链接】titanium-sdk 🚀 Native iOS and Android Apps with JavaScript 项目地址: https://gitcode.com/gh_mirrors/ti/titanium-sdk 在移动应用开发领域,Titanium SD…...

Blender 5.0三维建模软件免费下载

分享文件:Blender 下载链接:https://pan.xunlei.com/s/VOnoa-uAZeIscnA0CetsTTVXA1?pwdq9az# 下载连接...

【豆包从入门到精通】001、初识豆包:大模型时代的入门钥匙

001、初识豆包:大模型时代的入门钥匙 昨天深夜调试一个嵌入式日志解析脚本时,我又遇到了那个老问题——正则表达式写到第三层嵌套就开始失控,同事的代码注释像密码本,而产品经理在群里催着要三个月前的异常模式统计。就在我对着满…...

MongoDB单节点转副本集(Docker安装版本)

为什么需要副本集?场景单节点副本集支持 Oplog❌✅MongoShake 同步❌✅数据备份恢复仅全量全量增量高可用❌✅核心结论:MongoShake 依赖 Oplog 实现实时同步,而 Oplog 只在副本集模式下产生。Docker Compose 配置version: 3.8 services:mongo…...

Ryujinx模拟器技术指南:在PC上运行Switch游戏的完整方案

Ryujinx模拟器技术指南:在PC上运行Switch游戏的完整方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款用C#编写的开源Nintendo Switch模拟器,它…...