数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
PolarDB Agent Express,2核4GB
简介: 用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!

大家好呀!我是数据库小学妹👋

前几篇我们学会了各种查询技巧:单表查、多表连、分组统计、子查询嵌套。但随着查询的数据越来越多,我就发现:

同样一条查询,数据少的时候秒出,数据多了居然要等好几秒!有没有办法让查询变快?

当然是有的!今天给大家分享的就是这个可以让查询速度飞起来的神器——“​索引​”。它就像书的目录,能帮数据库快速找到目标数据,而不是一页页翻。

一、没有索引是什么体验?

想象一下,你拿到一本​没有目录​、没有拼音索引的《新华字典》。想查“数据库”三个字是什么意思,你只能从第一页开始,一行一行往下看……

这就是​全表扫描​:数据库把整张表的每一行都翻一遍,直到找到匹配的数据。数据量小的时候无所谓,一旦有几十万、几百万行,就会慢到怀疑人生。

索引就是给数据建的“目录”或“拼音索引”。有了它,数据库可以像查字典一样,先定位到大概位置,再快速找到目标。

💡 索引的本质是一种​数据结构(​MySQL里通常是B+树),它能帮助数据库​跳过大量无关数据​,直接定位到目标行。

二、索引长什么样?

假设有一张用户表 users,没有索引时想查 name = '小明',数据库会一行一行对比。

id name age city
1 张三 20 北京
2 李四 21 上海
3 小明 22 深圳
... ... ... ...

name 列加上索引后,数据库会维护一个​按字母排序的目录​:

name 所在位置(行号/地址)
李四 2
小明 3
张三 1

现在查 name = '小明',数据库先去目录里找到“小明”,然后直接跳到第3行,​不需要翻其他行​。

这就是索引加速的原理。

三、怎么创建和使用索引?

1. 创建索引

CREATE INDEX idx_name ON users (name);
  • idx_name 是索引的名字(随便起,但最好有意义)
  • users 是表名
  • (name) 是对哪一列建索引

2. 查看表的索引

SHOW INDEX FROM users;

3. 删除索引

DROP INDEX idx_name ON users;

4. 创建唯一索引(值不能重复)

CREATE UNIQUE INDEX idx_phone ON users (phone);

四、什么时候该用索引?什么时候不该用?

💡 索引不是越多越好。每建一个索引,插入、更新、删除数据时都会多花时间维护索引。读写平衡很重要。

五、最左前缀原则:联合索引的小秘密

如果你经常同时用 nameage 作为条件:

SELECT * FROM users WHERE name = '小明' AND age = 22;

可以建​联合索引​:

CREATE INDEX idx_name_age ON users (name, age);

这里需要注意:联合索引遵循​最左前缀原则​。意思是,查询条件必须从索引的最左边列开始才能用到索引。

  • WHERE name = '小明' → 用到索引
  • WHERE name = '小明' AND age = 22 → 用到索引
  • WHERE age = 22 → ​用不到索引​(因为没有从最左列 name 开始)

所以建联合索引时,要把最常用的筛选列放在最左边。

六、新手避坑指南(血泪总结)

七、今日学习心得

今天的内容总结成三句话:

  1. 索引就是书的目录​,帮数据库快速定位数据,避免全表扫描
  2. 不是越多越好​,适合经常作为 WHEREJOINORDER BY 的列
  3. 联合索引注意最左前缀​,从最常用的列开始

以前不知道索引的时候,觉得“查询慢就慢呗,等等就好了”。现在学会用 EXPLAIN 查看执行计划,看到 type 列从 ALL(全表扫描)变成 ref(使用索引),那种成就感,就像给自行车装上了发动机。

👋 我是​数据库小学妹​,一个从设计转行数据库的菜鸟。 我们一起,把复杂的技术变得简单有趣!💕


本文为个人学习总结,所有命令均在MySQL​ 8.0环境下验证。索引是把双刃剑,合理使用才能让查询飞起来。

相关文章
|
1月前
|
缓存 网络协议 API
如何查询IPv6地址的归属信息?命令行、在线工具、API接口全解析
本文详解IPv6地址查询的四大实用方案(命令行、在线控制台、API接口、本地离线库),剖析其精度、速度与适用场景,并提供选型建议及CDN调度、安全防护、地域分析等实战案例,助力高效精准获取IPv6归属信息。(239字)
588 7
|
28天前
|
SQL 关系型数据库 MySQL
5款好用的免费MySQL客户端,新手必备!
告别枯燥命令行!数据库小学妹精选5款免费MySQL图形化工具:Workbench(官方全能)、phpMyAdmin(免安装Web版)、DBeaver(多库支持)、HeidiSQL(Windows轻量之选)、TablePlus(高颜值跨平台)。小白友好,语法高亮、自动补全、可视化结构一应俱全,助你高效学SQL!
|
1月前
|
存储 人工智能 关系型数据库
阿里云数据库产品活动:上云优选,RDS年付88元起!多款云数据库产品免费试用
阿里云2026年数据库产品活动更新,覆盖RDS、PolarDB、NoSQL及数据仓库全系产品,提供从3折起的超值折扣、新老用户同享的专属福利及免费试用机会。活动涵盖2核4GB至8核16GB多规格配置,RDS 年付88元起!更有续费/升级享5-6折优惠。
352 4
|
1月前
|
存储 人工智能 安全
深度解析 OpenClaw 在 Prompt / Context / Harness 三个维度中的设计哲学与实践
本文的核心思路是从Prompt、Context和Harness这三个维度展开,分析OpenClaw的设计思路,提炼出其中可复用的方法论,来思考如何将这些精华的设计哲学应用到我们自己的Agent系统设计和业务落地中去。(文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。)
1080 26
深度解析 OpenClaw 在 Prompt / Context / Harness 三个维度中的设计哲学与实践
|
1月前
|
SQL NoSQL 关系型数据库
数据库分类一次讲清|转行学DB第2天
数据库小学妹(UI转行萌新)用通俗语言拆解数据库分类:从关系型(MySQL/Oracle)、NoSQL(Redis/MongoDB/Cassandra)、NewSQL(TiDB)到2026年爆火的向量数据库(Pinecone/Milvus),按数据模型、部署架构、业务负载三大维度梳理,配场景化案例与选学路径,助新手轻松入门。
|
1月前
|
人工智能 监控 Kubernetes
LoongCollector + ACS Agent Sandbox:构建 AI Agent 生产级运行平台
文章介绍了阿里云ACSAgentSandbox与LoongCollector协同构建的AIAgent生产级运行平台,通过沙箱隔离保障运行时安全,并以高性能、全链路可观测能力解决Agent行为不可预测和执行风险难题。
545 30
|
20天前
|
人工智能 编解码 API
AI视频生成低至0.9元/秒!阿里云HappyHorse开启灰度测试,150亿参数AI视频模型
阿里云HappyHorse(快乐小马)是阿里巴巴ATH创新事业部研发的150亿参数原生多模态AI视频大模型,全球首个实现音画联合生成的单流架构模型,4月登顶Artificial Analysis双榜。支持文/图生视频、1080P输出、7语种口型同步,最低0.44元/秒,已通过百炼平台、官网及千问App开放灰度测试。
|
1月前
|
存储 缓存 安全
《第一次启动QClaw,这5个设置决定你未来半年的使用上限》
本文针对多数用户首次启动QClaw直接使用、导致长期体验不佳的普遍误区,指出QClaw作为可进化智能体,首次初始化设置直接决定其未来半年的使用上限。文章基于实际使用经验,深度拆解了必须完成的5项核心基础设置:分层配置系统权限、按任务类型定制模型路由与优先级、开启微信指令白名单安全隔离、选择性启用技能包并优化缓存、迁移本地数据存储并配置P2P多端同步。文章纠正了默认设置的常见问题,帮助用户避免后期改配置的高成本,充分释放QClaw的执行效率与潜力。
668 2
《第一次启动QClaw,这5个设置决定你未来半年的使用上限》
|
26天前
|
SQL 关系型数据库 MySQL
SQL优化十大技巧,查询速度提升10倍!
数据库小学妹带你轻松提速SQL!10个实战优化技巧:精简SELECT、善用LIMIT、巧用EXPLAIN、合理建索引、避开函数索引失效、JOIN优于子查询、IN替代OR、批量操作、EXISTS优化大子查询、定期OPTIMIZE。附避坑指南,新手也能秒上手!