一张5000万行的表,加索引从45秒到0.02秒——索引设计你真的会吗

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 本文实测5000万订单表:无索引查询45秒,加索引后仅0.02秒(提升2250倍)。详解索引原理、建索引时机、联合索引最左前缀、覆盖索引及隐式转换陷阱,干货不啰嗦!

我是小耶,干运营半路出家的野生DBA——写功课只是为了我踩过的坑,你们别再踩了!

今天不搞虚的,直接上实验:一张 5000 万行的订单表,对比无索引和有索引的查询性能。

实验环境​:MySQL 8.0,innodb_buffer_pool_size 默认配置,订单表结构含 user_idorder_dateamount 等字段。

1. 无索引查询

SELECT * FROM orders WHERE user_id = 123456;

耗时 ​45 秒​。CPU 飙升,应用超时。

2. 添加单列索引

ALTER TABLE orders ADD INDEX idx_user_id (user_id);

再次执行相同查询:​0.02 秒​。性能提升 ​2250 倍​。

原因​:InnoDB 默认使用 B+ 树索引。没有索引时,执行全表扫描,逐行读取 5000 万条数据;有索引后,通过 B+ 树进行二分查找,树高通常为 3~4 层,每次查询只需 3~4 次磁盘 I/O,所以速度极快。


什么情况下应该建索引?

  • WHERE 条件中频繁出现的列
  • JOIN 的关联列
  • ORDER BYGROUP BY 的列

什么情况下不应建索引?

  • 列的区分度极低(例如 gender 只有男/女)。索引无法有效过滤数据,反而增加维护成本。
  • 频繁更新的列(UPDATE 会同时更新索引,写性能下降)。
  • 很少作为查询条件的列(索引占空间但无收益)。

进阶1:联合索引与最左前缀原则

如果经常同时按 user_idorder_date 查询,可以建联合索引:

ALTER TABLE orders ADD INDEX idx_user_date (user_id, order_date);

联合索引的 B+ 树先按第一列排序,再按第二列排序。​查询条件必须从索引最左侧开始连续匹配​,才能使用索引。

  • WHERE user_id = 123 —— 可用
  • WHERE user_id = 123 AND order_date > '2026-01-01' —— 可用
  • WHERE order_date > '2026-01-01' —— 无法使用,因为第一列缺失
  • WHERE user_id = 123 AND amount > 100 —— 只能用到 user_id 部分,amount 在索引中不连续

如何确定联合索引的列顺序?

  • 等值查询的列放前面​,​范围查询的列放后面​。
  • 例如 WHERE user_id = 123 AND order_date > '2026-01-01',索引 (user_id, order_date) 最优。
  • 如果有多个等值条件,把区分度高的列放左边。

进阶2:覆盖索引

如果 SELECT 的列全部包含在索引中,InnoDB 可以直接从索引返回数据,​无需回表​,性能进一步提升。

CREATE INDEX idx_user_date_amount ON orders (user_id, order_date, amount);
SELECT user_id, order_date, amount FROM orders WHERE user_id = 123;

执行 EXPLAIN 会在 Extra 列显示 Using index。覆盖索引能减少大量 I/O,尤其适合统计类查询。


常见错误:隐式类型转换导致索引失效

如果索引列是字符串类型,但查询时传入数字,MySQL 会对列做隐式转换,导致索引失效。

-- phone 是 varchar,正确做法是加引号
SELECT * FROM users WHERE phone = '13800000000';  -- 走索引
SELECT * FROM users WHERE phone = 13800000000;    -- 不走索引

小结

索引是数据库性能优化的核心手段,但不是越多越好。建议:

  1. 对高频查询的 WHEREJOINORDER BY 列建索引。
  2. 联合索引遵循最左前缀原则,范围查询列放最后。
  3. 尽量使用覆盖索引避免回表。
  4. 注意隐式类型转换、函数操作对索引的影响。

你可以花 10 分钟检查下业务核心表的慢查询日志,看看哪些查询缺少合适的索引。往往一两处优化就能让整个系统性能翻倍。

小耶在手,SQL 不愁。

你们遇到过“建了索引还是慢”的情况吗?

相关文章
|
2天前
|
人工智能 Rust 安全
玩转 OpenClaw Skill :阿里云部署 Hermes Agent/OpenClaw 配置浏览器与邮件Skill教程
如果说OpenClaw与大模型的组合是打造智能AI助理的“大脑”,那么Skills就是赋予它行动能力的“双手”。作为OpenClaw生态的核心扩展模块,Skills通过标准化功能封装,让AI助手能够自主完成网页浏览、信息检索、邮件管理等实际操作,彻底打破“只会说不会做”的局限。2026年最新版OpenClaw已默认集成浏览器操作插件agent-browser v0.2.0,同时支持从Clawhub技能库扩展更多实用功能。本文将先介绍阿里云OpenClaw(原Clawdbot)的快速部署步骤,再详细拆解默认Skills的实战场景与新技能安装方法,搭配可直接复用的指令与代码,让新手也能快速解锁AI
86 6
|
10天前
|
数据采集 缓存 运维
IP查询工具如何评估IP负载?云上资源分配的实战方法
我们曾因P99延迟骤升盲目扩容无效,最终靠IP分桶定位到某云厂商ASN段的爬虫流量。IP查询工具不测性能,而是为请求打标签(ASN/代理类型/风险分等),结合监控数据精准识别“谁拖垮了系统”。分四类桶、设三条件、按优先级调度(分流>限流>扩容>封禁),离线缓存+二次验证,避免误伤。
|
29天前
|
存储 人工智能 开发者
AI Agent 越来越难迭代,你缺少的不是功能
还在担心 Token 消耗过多?还在纠结 Agent 难以优化?不改一行业务代码,LoongSuite Python 探针帮你把一次请求从头到尾捋顺:哪一步访问了什么模型、调用了什么工具、召回了哪些文档、花费了多少 token、上下文发生了什么变化。
175 27
|
14天前
|
缓存 NoSQL 网络协议
如何为我的网站或应用集成IP归属地查询功能?
本文为网站/应用集成IP归属地查询的落地指南:强调“取对IP”是前提(仅信可信上游、严滤私网),采用“本地+Redis缓存+在线API+硬超时熔断”架构,失败自动降级至省/国家;区分展示型与风控型模型,确保可解释、可审计、可回滚,并严守隐私合规红线。(239字)
153 13
|
19天前
|
缓存 资源调度 BI
《零成本提升QClaw运行速度,这5招就够了》
本文针对QClaw随使用时长增加逐渐卡顿的普遍痛点,打破“卡顿必升级硬件”的常见误区,指出问题根源在于默认配置不合理与错误使用习惯。作者通过三周系统性实测,总结出五个零成本、立竿见影的性能优化技巧,涵盖模型分层加载、动态上下文裁剪、任务批量合并、本地缓存分级管理与后台进程资源隔离。这些技巧无需额外投入,可让QClaw运行速度直接翻倍,且适用于所有本地运行的智能体工具,为技术从业者提供了可直接落地的通用性能优化方案。
264 9
|
21天前
|
人工智能 安全 JavaScript
# 本地离线可用!Windows OpenClaw AI 数字员工安装全攻略
本教程详解Windows 10/11下零代码、图形化部署OpenClaw本地AI数字员工,全程离线运行、隐私安全,10分钟一键安装,支持文件整理、自动化办公等任务,小白友好、无踩坑。
|
29天前
|
人工智能 Rust JavaScript
开源项目 Agentic OS 实战指南:手把手教你从 ANOLISA 源码安装
ANOLISA 都能为你提供从构建到运行的完整工具链。
|
29天前
|
弹性计算 关系型数据库 数据库
2026年阿里云企业新用户定义及优惠政策解析
本文详解阿里云企业新用户定义(需企业实名、无付费记录、同主体限一账号)及2026年最新优惠政策,涵盖入门云服务器特惠(低至38元/年)、出海扶持(最高10万元抵扣)、迁云补贴及专项业务支持,助力企业精准降本上云。
175 9
|
29天前
|
存储 搜索推荐 数据可视化
《不用写代码!新手也能落地的QClaw专属模块定制指南》
本文针对QClaw使用者普遍面临的现成插件功能冗余、适配度不足、无法匹配个性化需求的核心痛点,结合深度实操与框架底层逻辑拆解,完整梳理了基于QClaw核心框架定制专属功能模块的全链路流程。文章从需求精准拆解、核心调度层对接、执行链路搭建、界面与权限配置,到多场景测试迭代,给出了零代码可落地的实操方案,同时拆解了框架的解耦设计哲学,帮助使用者跳出插件堆砌的误区,从被动的工具使用者转变为主动的功能设计者,真正解锁QClaw的核心价值。
143 7
|
2月前
|
人工智能 Linux API
零基础一站式搭建OpenClaw:阿里云+本地三系统+百炼API配置全程可复制教程
本文提供2026年最新、最简洁、最稳定的OpenClaw全平台部署方案,覆盖阿里云云端环境与MacOS、Linux、Windows11本地环境,包含从系统初始化到服务启动、端口放行、开机自启、模型对接、技能安装、命令使用、问题排查的全流程内容。所有步骤均为零基础设计,所有命令均可直接复制执行,无需额外知识即可完成稳定部署。
468 7