mysql索引介绍
索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:
-
从索引存储结构划分:B Tree索引、Hash索引、全文索引
-
从应用层次划分:主键索引、唯一索引、单值索引、复合索引
-
从索引键值类型划分:主键索引、辅助索引(二级索引)
-
从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)
1.什么是索引
索引是为了高效获取数据的数据结构,能加快数据库查询数据的速度。
2.索引的存储方式
索引存储是由B+树来实现的,数据都存放在叶子节点,非叶子节点只存储主键值。叶子节点之间用双向指针连接,构成双向链表,由小到大排列。

3.索引的优势和劣势
优势:
- 可以提高数据的检索速度,减少IO次数。
- 通过索引列对数据进行排序,可大大提升效率。
劣势:
- 索引会占用磁盘的空间。
- 会影响更新表的效率,不仅要更新数据,还要同步更新索引。
4.常用的索引
4.1主键索引
索引列的值必须是唯一的,而且不允许有空值。
4.2唯一索引
索引列的值必须是唯一的,可以为空值。
4.3全文索引
如果在需要模糊查询的列上设置普通索引,那么使用like查询索引并不生效,此时就需要创建全文索引了。
4.4组合索引
组合索引即一个索引包含多个列,创建组合索引所需的开支比多个单值索引要小。
5.组合索引中的最左前缀原则
例如此时表中有a,b,c三列,我们创建(a,b)为组合索引,那么我们在查询时如果需要用到此索引,就需要遵守最左前缀原则,通俗的说就是我们在使用select查询语句时,where后面的条件里面必须有创建索引时的最左列(上面的a列),否则查询时索引不生效。
具体原因:在组合索引中,叶子节点从左到右是整体a有序,b的话其实并不是整体有序的,而是在a的基础上局部有序,即在每个单独的叶子节点里面b才是有序的。这样的话就很好解释了,比如我们只把b作为条件来查询,那这样的话由于b并不是整体有序的,这样和全局查询没什么区别,但是如果我们把a和b都作为条件,那么因为a是整体有序的,就可以很快的锁定满足a的条件,然后再局部的查询b就可以大大提升效率了。
举例:
- select * from table where a=’’and b=’’索引生效
- select * from table where b=’’and a=’’索引生效
- select * from table where c=’’and a=’’索引生效(利用索引下推先筛a)
- select * from table where b=’’and c=’’索引不生效
6.索引创建的原则
6.1需要创建的情况:
- 主键会自动建立唯一索引。
- 频繁的作为查询的条件的字段。
- 作为排序的字段。order
- 作为分组的字段。group
6.2不需要创建的情况:
- 表内本身的数据太少。
- 经常要增删改的表,因为要一直同步修改索引。
- 不作为查询条件的字段。
- 数据重复且分布比较均匀的字段,比如性别。
相关文章:
mysql索引介绍
索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下: 从索引存储结构划分:B Tree索引、Hash索引、全文索引 从应用层次划分:主键索引、唯一索引、单值索引、复合索引 从索引键值类型划分&am…...
说一下什么是tcp的2MSL,为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?
1.TCP之2MSL 1.1 MSL MSL:Maximum Segment Lifetime报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间 1.2为什么存在MSL TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段,并且TTL的限制是基于跳数 1.3…...
更新spring boot jar包中的BOOT-INF/lib目录下的jar包
更新spring-boot jar包中的BOOT-INF/lib目录下的jar包 场景 需要更新lib目录下某个jar包的配置文件 失败的解决方法 用解压软件依次打开spring-boot jar包(设为a.jar)、BOOT-INF/lib目录下的jar包(设为b.jar),然后修改…...
纯前端 -- html转pdf插件总结
一、html2canvasjsPDF(文字会被截断): 将HTML元素呈现给添加到PDF中的画布对象,不能仅使用jsPDF,需要html2canvas或rasterizeHTML html2canvasjsPDF的具体使用链接 二、html2pdf(内容显示不全文字会被截断…...
数据结构和算法基础
巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 数据结构和算法 程序 数据结构算法 数据结构是算法的基础 问题1:字符串匹配问题。str1 是否完全包含 str2 1)暴…...
JS二维数组转化为对象
将二维数组转化为对象的形式 转之前的数据: 转之后: const entries new Map([[foo, bar],[baz, 42],[beginNode, 202212151048010054],[beginNode, 202212151048447710],]); console.log(entries)const obj Object.fromEntries(entries);console.lo…...
通过 EPOLL 解决客户端同时连接多服务器的问题
项目需求是 程序上 同时配置了多个服务端 设备 每隔一段时间需要 比如1分钟 连一下服务器看下是否连通 并将结果上报给平台 原来是用线程池来做的 具体大概就是 定时器到了之后 遍历设备列表 找到设备之后 通过 socket连接 发送一个指令 等待服务器返回 用来检查是…...
JavaScript数据结构【进阶】
注:最后有面试挑战,看看自己掌握了吗 文章目录 使用 splice() 添加元素使用 slice() 复制数组元素使用展开运算符复制数组使用展开运算符合并数组使用 indexOf() 检查元素是否存在使用 for 循环遍历数组中的全部元素创建复杂的多维数组将键值对添加到对象…...
jQuery编程学习3(jQuery 其他方法: jQuery 拷贝对象、 jQuery 多库共存、jQuery 插件)
目录 jQuery 其他方法 1. jQuery 拷贝对象 $.extend()方法 2. jQuery 多库共存 问题概述: 客观需求: jQuery 解决方案:(两种方式) 3. jQuery 插件 jQuery 插件常用的网站: jQuery 插件使用步骤&…...
jvm——垃圾回收机制(GC)详解
开始之前有几个GC的基本问题 什么是GC? GC 是 garbage collection 的缩写,意思是垃圾回收——把内存(特别是堆内存)中不再使用的空间释放掉;清理不再使用的对象。 为什么要GC? 堆内存是各个线程共享的空间…...
计算机组成原理-笔记-第七章
目录 七、第七章——输入输出系统 1、IO设备与IO控制方式 (1)控制方式(查询,中断,DMA) (2)通道控制 (3)IO系统 (4)总结 2、外设…...
【Linux】网络基础2
文章目录 网络基础21. 应用层1.1 协议1.2 HTTP 协议1.2.1 URL1.2.2 urlencode和urldecode1.2.3 HTTP协议格式1.2.4 HTTP的方法1.2.5 HTTP的状态码1.2.6 HTTP 常见的header1.2.7 最简单的HTTP服务器 2. 传输层2.1 端口号2.1.1 端口号范围划分2.1.2 认识知名端口号2.1.3 netstat2…...
可视化绘图技巧100篇进阶篇(四)-三维簇状柱形图(3D Clustered Bar Chart)
目录 前言 适用场景 图例 柱形图 一、柱形图的特点 二、柱形图的类型...
架构设计第八讲:架构 - 理解架构的模式2 (重点)
架构设计第八讲:架构 - 理解架构的模式2 (重点) 本文是架构设计第8讲:架构 - 理解架构的模式2,整理自朱晔的互联网架构实践心得, 他是结合了 微软给出的云架构的一些模式的基础上加入他自己的理解来总结互联网架构中具体的一些模式。我在此基…...
Java中的Maven Shade插件是什么?
Maven Shade插件是一个非常有用的Maven插件,它可以帮助你在构建项目时打包所有依赖项,并将其打包到一个单独的JAR文件中。这对于在构建过程中使用多个依赖项的项目非常有用,因为它可以让你避免在每个依赖项中都包含所有依赖项,从而…...
ffmpeg的bpp是什么?
例如: AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... AV_PIX_FMT_BGR24, …...
【C# 基础精讲】类和对象的概念
在面向对象编程(Object-Oriented Programming,OOP)中,类和对象是两个核心概念,用于描述和实现现实世界中的实体和关系。OOP 是一种编程范式,通过将数据和操作封装为对象来组织和管理代码,使得代…...
微信ipad实现批量添加联系人及批量分组
GEWE框架官方网站 geweapi.com 点击访问即可 搜索 小提示: 添加联系人必要接口搜索返回的V3 V4用于添加联系人 请求URL: http://域名地址/api/contacts/search 请求方式: POST 请求头: Content-Type:application/…...
Highcharts引入
Highcharts是和jQuery一起使用的,所以需要下载好jQuery jQuery下载方式:访问:http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js,然后全选复制到自己新建的txt文档中,最后把扩展名改为js。 Highcharts下载方式&…...
腾讯云轻量和CVM有什么区别?不都是服务器吗?
腾讯云轻量服务器和云服务器有什么区别?为什么轻量应用服务器价格便宜?是因为轻量服务器CPU内存性能比云服务器CVM性能差吗?轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境,云服务器CV…...
DM8连接Oracle 11G踩坑实录:用19c的OCI驱动搞定dblink(附完整依赖包)
DM8与Oracle 11G跨数据库连接实战:高版本OCI驱动的避坑指南 当企业数据架构需要同时操作达梦DM8和Oracle 11G数据库时,数据库链接(DBLINK)成为关键桥梁。但实际操作中,OCI驱动版本冲突、依赖库缺失等问题常常让DBA们陷…...
手把手教你用示波器抓LIN总线波形:从显性/隐性电平到唤醒信号,一次看懂物理层通信
手把手教你用示波器抓LIN总线波形:从显性/隐性电平到唤醒信号,一次看懂物理层通信 在汽车电子系统中,LIN总线作为低成本、低复杂度的串行通信协议,广泛应用于车门控制、座椅调节、空调系统等场景。对于测试工程师和技术支持人员而…...
从汽车悬架到手机防抖:单自由度振动模型在工程中的5个真实应用拆解
从汽车悬架到手机防抖:单自由度振动模型在工程中的5个真实应用拆解 振动现象无处不在,从桥梁的微风振动到手机摄像头的微小抖动,工程师们一直在与各种振动问题打交道。单自由度振动模型作为振动力学中最基础的模型,其简洁性和实用…...
3个场景告诉你:为什么Mac用户需要桌面歌词显示工具LyricsX
3个场景告诉你:为什么Mac用户需要桌面歌词显示工具LyricsX 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 如果你正在使用Mac听音乐,是否曾有过这…...
5个高效方案:解决抖音内容批量下载与管理的完整指南
5个高效方案:解决抖音内容批量下载与管理的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...
如何为Chrome调试器编写集成测试:puppeteer测试框架实战
如何为Chrome调试器编写集成测试:puppeteer测试框架实战 【免费下载链接】vscode-chrome-debug Debug your JavaScript code running in Google Chrome from VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-chrome-debug 在现代Web开发中&…...
ALOS PALSAR的L波段SAR到底强在哪?从灾害监测到地形测绘的实战应用解析
ALOS PALSAR的L波段SAR技术优势与行业应用深度解析 当洪水淹没村庄、山体发生毫米级位移或森林碳储量需要精准测算时,传统光学遥感往往受制于云层遮挡和时间分辨率。这时,搭载L波段合成孔径雷达的ALOS PALSAR卫星便展现出独特价值——它不仅能穿透云雨实…...
Linux下备份文件
在Linux系统中备份文件有多种方法,可以根据你的需求选择不同的工具和策略。以下是一些常用的备份方法: 1、使用cp命令 适用于简单的文件复制备份。 复制单个文件 cp /path/to/original_file /path/to/backup_location/复制整个目录 cp -r /path/to/origi…...
从哲学到机器学习:非科班转型的实践指南
1. 从哲学系毕业生到机器学习实践者的转型之路2015年,35岁的Brian Thomas坐在保险公司的服务器机房,盯着满屏的PowerShell脚本。这位哲学系毕业的IT管理员突然意识到:自己每天重复的自动化脚本工作,与真正改变世界的技术之间&…...
实战踩坑记录:在Windows 11上用Android Studio模拟器跑通Android Maxim的全过程
Windows 11环境下的Android Maxim实战:从环境搭建到自动化测试全解析 在移动应用开发领域,自动化测试已成为保证产品质量的关键环节。对于Windows平台上的Android开发者而言,如何在本地环境中高效运行自动化测试工具,是提升开发效…...
