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

java面试必问14:MySQL 索引类型:从基础到优化,面试官给你点赞

MySQL 索引类型从基础到优化一篇讲透面试官“MySQL 有哪些索引类型”你“主键索引、唯一索引、普通索引、复合索引、全文索引。索引能大大加快查询速度但会降低增删改的性能。”面试官“那复合索引的最左前缀原则是什么为什么会有这个原则”你“……”很多人能列出索引类型但一追问“什么时候索引会失效”“如何设计高效索引”就含糊了。本文从索引的底层结构出发讲透各种索引的特点和使用场景。一、索引是什么索引是数据库中的一种数据结构类似于书的目录可以快速定位数据所在的位置避免全表扫描。MySQL 中常用的索引结构是BTreeInnoDB 存储引擎。索引虽然能加速查询但需要额外的存储空间并且在数据插入、更新、删除时需要同步维护因此会降低写入性能。二、五种索引类型详解1. 主键索引PRIMARY KEY特点唯一且非空一个表只能有一个主键索引。底层聚簇索引Clustered Index叶子节点直接存储整行数据。创建CREATETABLEuser(idINTPRIMARYKEY,-- 主键索引nameVARCHAR(50));-- 或单独添加ALTERTABLEuserADDPRIMARYKEY(id);注意InnoDB 中如果没有显式定义主键会自动选择一个唯一非空索引作为聚簇索引如果也没有则隐式生成一个 6 字节的 rowid 作为主键。建议每个表都显式指定主键。2. 唯一索引UNIQUE特点索引列的值必须唯一但允许 NULL可以有多个 NULL。作用保证数据唯一性同时加速查询。创建CREATETABLEuser(idINTPRIMARYKEY,emailVARCHAR(100)UNIQUE-- 唯一索引);-- 或CREATEUNIQUEINDEXidx_emailONuser(email);3. 普通索引INDEX / KEY特点最基本索引无唯一性约束允许重复值。作用加速查询是最常用的索引类型。创建CREATEINDEXidx_nameONuser(name);4. 复合索引Composite Index特点在多个列上建立一个索引遵循最左前缀原则。作用同时加速对多个列的查询尤其适合WHERE条件中包含多个字段的场景。创建CREATEINDEXidx_name_ageONuser(name,age);查询WHERE name 张三 AND age 25可以利用该索引但WHERE age 25不能使用该索引因为没有使用索引的最左列name。5. 全文索引FULLTEXT特点用于全文搜索类似搜索引擎仅支持MyISAM和InnoDBMySQL 5.6。作用对文本内容进行关键词匹配比LIKE %keyword%高效得多。创建CREATETABLEarticle(idINTPRIMARYKEY,contentTEXT,FULLTEXT(content));-- 查询SELECT*FROMarticleWHEREMATCH(content)AGAINST(数据库优化);注意全文索引有停用词、最小词长度等限制适合大文本字段的搜索场景。三、索引的优缺点优点缺点大大加快SELECT查询速度占用额外磁盘空间加速ORDER BY、GROUP BY降低INSERT、UPDATE、DELETE速度需维护索引唯一索引能保证数据唯一性索引设计不合理会导致查询优化器选错索引权衡索引不是越多越好。一般建议对查询频繁、区分度高的列建索引避免在低基数列如性别或频繁更新的列上建索引。四、复合索引的最左前缀原则重点复合索引(a, b, c)实际上相当于创建了三个索引(a)、(a, b)、(a, b, c)。查询时只有从索引的最左列开始匹配才能使用索引。能用索引的情况WHERE a 1WHERE a 1 AND b 2WHERE a 1 AND b 2 AND c 3WHERE a 1 AND c 3只用到 ac 无法使用但 a 可过滤一部分不能用索引的情况WHERE b 2没有最左列 aWHERE b 2 AND c 3范围查询的影响WHERE a 1 AND b 2 AND c 3a 和 b 能用到索引c 用不到因为 b 是范围查询后面的列停止匹配。设计建议将区分度高的列放在复合索引左侧等值查询的列优先于范围查询的列。五、索引失效的常见场景场景示例原因对索引列使用函数WHERE YEAR(create_time) 2024无法使用索引应改为范围查询隐式类型转换WHERE phone 13800138000phone 是 varchar类型不匹配索引失效LIKE 以通配符开头WHERE name LIKE %张三无法使用索引OR 前后未全索引WHERE a 1 OR b 2只有 a 有索引需要全表扫描使用!或WHERE status ! 0非等值查询一般不用索引使用IS NULL或IS NOT NULL某些情况下失效取决于版本和数据分布-六、如何评估索引是否有效使用EXPLAIN命令查看执行计划EXPLAINSELECT*FROMuserWHEREname张三;关键列typeconstrefrangeindexALL好到差possible_keys可能使用的索引key实际使用的索引rows预估扫描行数ExtraUsing index表示覆盖索引不回表Using where表示需要过滤七、常见面试追问Q1主键索引和唯一索引的区别主键索引不允许 NULL唯一索引允许 NULL多个 NULL。一个表只能有一个主键可以有多个唯一索引。主键通常是聚簇索引InnoDB唯一索引是辅助索引。Q2为什么推荐使用自增整数做主键插入时顺序写入BTree 页分裂少性能高。UUID 或随机字符串作为主键会导致随机插入页分裂频繁且占用空间大。Q3什么是覆盖索引如果一个索引包含了查询所需的所有列即SELECT的列都在索引中那么不需要回表查询数据行称为覆盖索引。例如CREATEINDEXidx_nameONuser(name);SELECTnameFROMuserWHEREname张三;-- 覆盖索引不回表Q4索引下推Index Condition Pushdown是什么MySQL 5.6 引入的优化在索引遍历过程中对索引中包含的字段先做条件过滤减少回表次数。例如INDEX(a, b)查询WHERE a 1 AND b 2没有 ICP 时会先根据 a1 回表再过滤 b有 ICP 时直接在索引中判断 b2只回表符合的数据。Q5联合索引中字段顺序如何设计区分度高的列放在左侧。等值查询的列放在左侧范围查询的列放在右侧。经常用于排序的列可以考虑加入索引ORDER BY也能利用索引顺序。八、总结索引类型特点适用场景主键索引唯一、非空、聚簇每张表必备作为行标识唯一索引值唯一可 NULL保证字段唯一性如邮箱、手机号普通索引无约束加速查询最常用复合索引多列组合最左前缀多条件查询、排序全文索引关键词匹配大文本搜索如文章、评论一句话记住索引设计等值左前缀范围右靠后覆盖索引少回表函数运算全失效。索引是把双刃剑合理的索引能让查询飞起来滥用索引会让写入慢如牛。理解索引类型和原理是 MySQL 优化的第一步。希望这篇文章能帮你彻底掌握 MySQL 索引的相关知识从容应对面试和实际调优欢迎继续讨论。我的个人简介最后有一段内容感兴趣的朋友可以去找找看。那里有我日常分享的技术深度 解析和职场避坑指南期待与您继续交流。

相关文章:

java面试必问14:MySQL 索引类型:从基础到优化,面试官给你点赞

MySQL 索引类型:从基础到优化,一篇讲透面试官:“MySQL 有哪些索引类型?” 你:“主键索引、唯一索引、普通索引、复合索引、全文索引。索引能大大加快查询速度,但会降低增删改的性能。” 面试官:…...

域名与DNS解析原理

域名与DNS解析原理:互联网的“导航系统” 在互联网世界中,域名就像是我们熟悉的地址,而DNS(域名系统)则是将这些地址转换为计算机能识别的IP地址的“导航系统”。没有DNS,我们可能需要记住一串复杂的数字&…...

终极指南:5步掌握Beat Saber模组管理神器ModAssistant

终极指南:5步掌握Beat Saber模组管理神器ModAssistant 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant 你是否曾因Beat Saber模组安装繁琐而烦恼?是否在版本冲突和依赖…...

Rust 编译器优化参数详解

Rust编译器优化参数详解 Rust作为一门注重性能与安全的系统编程语言,其编译器在代码优化方面提供了丰富的参数选项。合理使用这些优化参数可以显著提升程序的运行效率,减少资源消耗。本文将详细介绍Rust编译器的优化参数,帮助开发者更好地利…...

别再死记硬背网络结构了!一张图看懂CNN六大经典模型的核心思想与演进逻辑

卷积神经网络进化史:从LeNet到MobileNet的技术跃迁图谱 在计算机视觉领域,卷积神经网络(CNN)的发展历程堪称一部技术进化史。从最初只能识别手写数字的LeNet,到如今能在移动设备上实时运行的MobileNet,每一…...

3个理由告诉你为什么华硕路由器需要AdGuard Home守护你的家庭网络

3个理由告诉你为什么华硕路由器需要AdGuard Home守护你的家庭网络 【免费下载链接】Asuswrt-Merlin-AdGuardHome-Installer The Official Installer of AdGuardHome for Asuswrt-Merlin 项目地址: https://gitcode.com/gh_mirrors/as/Asuswrt-Merlin-AdGuardHome-Installer …...

Ubuntu 系统下ClamAV的进阶配置与高效扫描策略

1. ClamAV在Ubuntu系统下的核心价值与应用场景 作为一款开源杀毒引擎,ClamAV在Linux环境中扮演着独特的安全卫士角色。不同于Windows平台那些占用大量资源的商业杀软,ClamAV以轻量级设计著称,特别适合服务器环境。我在管理二十多台Ubuntu服务…...

别再只用MD5了!手把手教你用Java Bouncy Castle库实现SM3加盐密码存储

从MD5到SM3:Java开发者必备的密码存储安全升级指南 在当今数据泄露频发的时代,密码存储的安全性已成为每个Java开发者必须重视的基础课题。许多遗留系统仍在使用MD5这样的弱哈希算法,这无异于在数字世界中用纸板门保护金库。本文将带你深入了…...

高效PCB逆向分析:OpenBoardView专业电路板查看器深度实战指南

高效PCB逆向分析:OpenBoardView专业电路板查看器深度实战指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 面对复杂的电路板设计文件,你是否曾因无法直接查看.brd文件而束手无策…...

AGI伦理红线被重写?:2026奇点大会三大情感建模协议首次公开,仅限首批认证开发者接入

第一章:2026奇点智能技术大会:AGI与情感智能 2026奇点智能技术大会(https://ml-summit.org) AGI演进的关键拐点 2026年大会首次将通用人工智能(AGI)的评估标准从任务泛化能力延伸至跨模态因果推理与自主目标重构能力。主流框架如…...

Rust的闭包语法糖与函数指针在回调接口中的转换与互操作性

Rust的闭包语法糖与函数指针在回调接口中的转换与互操作性 Rust作为一门注重安全与性能的系统级语言,其闭包和函数指针的设计在回调接口中扮演着重要角色。闭包提供了灵活的上下文捕获能力,而函数指针则以轻量级和确定性著称。两者在回调场景下的转换与…...

OV5640图像拖影?帧率不稳?可能是你的PCLK没配对!附调试心得

OV5640图像拖影与帧率不稳的PCLK调试实战指南 当你在嵌入式项目中集成OV5640摄像头模组时,是否遇到过这样的场景:硬件连接一切正常,驱动程序也能跑通,但实际采集到的图像却出现拖影、撕裂或帧率跳变?作为一款广泛应用…...

工业通信协议:Modbus与OPC UA的解析与实现

工业通信协议:Modbus与OPC UA的解析与实现 在现代工业自动化系统中,通信协议是实现设备互联和数据交换的核心技术。Modbus和OPC UA作为两种广泛应用的工业通信协议,分别代表了传统与新兴技术的典型代表。Modbus以其简单、可靠的特点在工业领…...

【2026奇点智能技术大会权威解码】:AGI突破临界点与区块链可信基座的5大融合范式

第一章:2026奇点智能技术大会:AGI与区块链 2026奇点智能技术大会(https://ml-summit.org) AGI原生智能体的链上自治范式 大会首次发布「NeuronChain」——一个专为AGI智能体设计的轻量级L1区块链,支持动态权重共识(DWC&#xff…...

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南)

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南) 作为一名长期使用Mac进行分子可视化研究的科研人员,我深知PyMol在结构生物学领域的重要性。商业版PyMol虽然功能强大,但频繁…...

用pycocotools玩转COCO数据集:从json文件解析到可视化mask的完整实战

用pycocotools玩转COCO数据集:从json文件解析到可视化mask的完整实战 计算机视觉领域的研究者和开发者们,一定对COCO数据集不陌生。这个包含超过20万张图像、80个物体类别的大型数据集,已成为目标检测、实例分割等任务的基准测试平台。但面对…...

网络拓扑发现实战:从LLDP数据采集到D3.js可视化前端全链路解析

网络拓扑发现实战:从LLDP数据采集到D3.js可视化全链路解析 现代网络架构正变得越来越复杂,从传统的三层架构到如今的云原生网络,设备之间的连接关系呈现出动态化、多样化的特征。对于网络运维团队而言,如何快速准确地掌握全网拓扑…...

从医院急诊到服务器宕机:泊松分布如何帮你预测那些‘随机’发生的麻烦事?

从医院急诊到服务器宕机:泊松分布如何帮你预测那些‘随机’发生的麻烦事? 凌晨三点的医院急诊室,值班医生刚处理完一个突发心梗患者,护士站的呼叫铃突然密集响起——三辆救护车同时抵达。同一时刻,某电商平台的服务器监…...

别再为时间戳对不齐发愁了!用pandas的merge_asof()轻松搞定金融数据分析

金融数据分析实战:用pandas的merge_asof()解决时间戳匹配难题 金融数据分析师们经常遇到这样的场景:当你需要将交易记录与市场行情数据进行关联分析时,却发现两者的时间戳无法完美对齐。传统的精确匹配方法在这里显得力不从心,而手…...

5分钟掌握WeblogicScan:一键检测Oracle WebLogic历史漏洞的利器

5分钟掌握WeblogicScan:一键检测Oracle WebLogic历史漏洞的利器 【免费下载链接】WeblogicScan Weblogic一键漏洞检测工具,V1.5,更新时间:20200730 项目地址: https://gitcode.com/gh_mirrors/we/WeblogicScan Weblogic漏洞…...

三菱FX5U PLC以太网通信实战:手把手教你用GX Works3配置MC协议服务端(附报文分析)

三菱FX5U PLC以太网通信实战:从配置到报文分析的完整指南 在工业自动化领域,PLC的以太网通信能力已成为现代设备互联的基础需求。三菱FX5U系列PLC凭借其出色的性能和灵活的通信配置选项,在中小型控制系统中广受欢迎。本文将深入探讨如何通过…...

Cats Blender插件:快速导入和优化VRChat模型的终极解决方案 [特殊字符]

Cats Blender插件:快速导入和优化VRChat模型的终极解决方案 🚀 【免费下载链接】cats-blender-plugin :smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo…...

Photoshop图层批量导出终极指南:告别手动保存,效率提升300%

Photoshop图层批量导出终极指南:告别手动保存,效率提升300% 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe.…...

威纶通TK6071iQ触摸屏宏指令实战:手把手教你搞定Modbus温湿度传感器数据转换

威纶通TK6071iQ触摸屏宏指令实战:手把手教你搞定Modbus温湿度传感器数据转换 在工业自动化领域,威纶通TK6071iQ触摸屏因其稳定性和易用性广受青睐。但当它与Modbus温湿度传感器配合使用时,许多工程师都会遇到一个棘手问题——如何将传感器返回…...

深度解析:基于深度学习的远程生理信号监测技术实现与架构设计

深度解析:基于深度学习的远程生理信号监测技术实现与架构设计 【免费下载链接】rppg Benchmark Framework for fair evaluation of rPPG 项目地址: https://gitcode.com/gh_mirrors/rpp/rppg 远程光电生理信号监测(rPPG)技术通过分析面…...

毕业论文 | 基于光流的十字路口闯红灯车辆与行人检测识别系统【附完整matlab代码】

文章目录 摘要 Abstract 第1章 绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.2.1 智能交通监控系统研究现状 1.2.2 光流法在交通检测中的应用现状 1.2.3 闯红灯检测技术研究现状 1.3 论文主要研究内容 1.4 论文结构安排 第2章 光流法理论基础 2.1 光流的基本概念 2.2 光流约束…...

如何快速解密中兴光猫配置文件:终极网络自主管理指南

如何快速解密中兴光猫配置文件:终极网络自主管理指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 你是否曾经因为无法修改自家光猫的WiFi密码而感到困扰&am…...

【2026科研生存指南】:错过SITS2026这组AGI协同实验数据,你将落后至少18个月迭代周期

第一章:SITS2026案例:AGI辅助科学研究 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的跨模态科研工作流 在SITS2026发布的SITS-Science Agent v3.2中,通用人工智能系统首次实现对高能物理实验全流程的自主协同干预。该系统整合了粒…...

技术社区参与

技术社区参与:开发者成长的加速器 在数字化浪潮中,技术社区已成为开发者学习、协作与创新的核心平台。无论是开源项目的贡献,还是技术难题的讨论,社区为从业者提供了资源共享与经验沉淀的舞台。参与技术社区不仅能拓展专业视野&a…...

这份Java核心知识点整理PDF,几乎涵盖了所有Java岗位的面试题!

如果你正在准备Java开发面试,不管是校招还是社招,这份《JAVA核心知识点整理》PDF绝对是你在冲刺阶段最值得收藏的资料之一。它不是那种泛泛而谈的教程,而是直击面试高频考点的题库,包含了近300页的干货,从JVM底层到微服…...