网易首页 > 网易号 > 正文 申请入驻

50亿条订单拖垮查询?三种索引策略让数据库快10倍

0
分享至

你的电商系统订单表已经攒了5000万行数据。运营后台每次打开"待处理订单"页面都要转圈十几秒,你加了索引却没什么改善——问题可能在于,你建的索引类型根本不对。

大多数开发者知道索引能加速查询,但给每个过滤字段都堆上基础索引,结果往往是存储膨胀、写入变慢,性能却没提升。真正的高手懂得根据查询场景选择索引类型。这篇用PostgreSQL演示的实战指南,同样适用于MySQL、SQL Server等主流数据库。


假设你的orders表长这样:订单ID、客户ID、状态(pending/shipped/delivered/cancelled)、金额、创建时间、地区。5000万行里,98%是已完成或取消的订单,只有2%处于待处理或发货中——这种极度倾斜的数据分布,正是普通索引失效的典型场景。


局部索引:只索引你查的那部分

运营后台的高频查询是"拉取所有pending和shipped订单,按时间倒序排"。如果在status字段建普通索引,数据库会为全部5000万行建立索引项,其中4900万行永远不会被这条查询用到。

局部索引的解法很直接:只给符合条件的行建索引。

CREATE INDEX idx_orders_active ON orders (created_at DESC) WHERE status IN ('pending', 'shipped');

这样索引只覆盖约100万行活跃订单,体积缩小98%,更容易常驻内存。即使总表持续增长,已完成订单也不会污染这个索引。执行计划对比很直观:之前是全表扫描5000万行(cost=1245000),现在是索引扫描100万条目(cost=9834),成本相差两个数量级。

局部索引最适合三类场景:数据分布高度倾斜、频繁查询"活跃/开放"记录而历史数据持续累积、以及需要"非空值唯一约束"(如CREATE UNIQUE INDEX ON users (email) WHERE email IS NOT NULL)。

复合索引:字段顺序决定生死

复合索引覆盖多个字段,但字段顺序不是随意的。核心规则是:最左前缀匹配。索引(a,b,c)可以加速WHERE a=1、WHERE a=1 AND b=2、WHERE a=1 AND b=2 AND c=3,但无法单独用于WHERE b=2或WHERE c=3。

假设常见查询是按地区查某时间段的订单:WHERE region='APAC' AND created_at > '2024-01-01'。如果建索引(created_at, region),数据库能用到created_at部分,但region的过滤要在回表后做;反过来建(region, created_at),两个条件都能在索引内完成过滤,效率更高。

更隐蔽的陷阱是排序。如果查询是WHERE region='APAC' ORDER BY created_at DESC,索引(region, created_at DESC)能避免额外的排序操作;而(created_at DESC, region)虽然也能过滤,但取出数据后还要重新排序。


覆盖索引:彻底消灭回表

即使命中索引,如果SELECT的字段不在索引里,数据库还得回主表查数据——这叫"回表",是随机IO的大户。覆盖索引的思路是:把查询需要的所有字段都塞进索引,让数据库只读索引就能返回结果。

回到运营后台的例子,查询是SELECT id, customer_id, total FROM orders WHERE status IN ('pending', 'shipped') ORDER BY created_at DESC。如果建局部索引时加上INCLUDE子句:

CREATE INDEX idx_orders_active_covering ON orders (created_at DESC) INCLUDE (id, customer_id, total) WHERE status IN ('pending', 'shipped');

PostgreSQL可以直接从索引返回全部字段,无需触碰主表。执行计划里的"Index Only Scan"比"Index Scan"更进一步,在IO密集型场景提升显著。

INCLUDE的妙处在于:id、customer_id、total只作为"载荷"存储,不参与索引排序,因此不影响索引维护成本,也不限制查询时的字段顺序。

怎么选?一张决策表

数据倾斜严重、只查小部分行 → 局部索引
多字段联合过滤、有排序需求 → 复合索引(仔细排字段顺序)
SELECT字段固定、想彻底消灭回表 → 覆盖索引

这三种策略可以叠加使用。上面的例子就是局部+覆盖的组合,把5000万行的大表查询降到了百万级索引的内存扫描。

索引不是越多越好,每个索引都在写入时产生维护成本。好的数据库设计是在查询模式和存储开销之间找平衡——而选对索引类型,是这个平衡里最被低估的杠杆。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
CBA最新消息!辽宁男篮留用莱迪,杜锋或离开广东宏远

CBA最新消息!辽宁男篮留用莱迪,杜锋或离开广东宏远

体坛瞎白话
2026-06-01 16:12:51
法网最大冷门!乌克兰选手坦言"不为赢球打网球"

法网最大冷门!乌克兰选手坦言"不为赢球打网球"

竞技风云录
2026-06-01 00:18:48
无需催生!中国最愿意生孩子的省,根本不用催,连续七年全国第一

无需催生!中国最愿意生孩子的省,根本不用催,连续七年全国第一

素衣读史
2026-05-26 21:52:56
郑丽文启程赴美,第一道难关出现,岛内收到消息,解放军直接定性

郑丽文启程赴美,第一道难关出现,岛内收到消息,解放军直接定性

近史谈
2026-06-01 16:56:37
空调开到27度,一晚上会耗多少电?终于有师傅说出实话!

空调开到27度,一晚上会耗多少电?终于有师傅说出实话!

小柱解说游戏
2026-06-01 10:00:20
为什么水运比陆运成本低那么多?看完网友的分享太涨知识了!

为什么水运比陆运成本低那么多?看完网友的分享太涨知识了!

另子维爱读史
2026-05-31 08:24:27
百草枯发明者李德军现状:女儿喝百草枯丧命,70岁仍不断救人赎罪

百草枯发明者李德军现状:女儿喝百草枯丧命,70岁仍不断救人赎罪

坠入二次元的海洋
2026-05-30 14:56:29
发现酱牛肉切开是彩虹色的,千万别立刻吃!

发现酱牛肉切开是彩虹色的,千万别立刻吃!

果壳
2026-05-31 20:11:36
彻底退出天津!全国知名连锁品牌全市倒闭!会员退费怎么办?

彻底退出天津!全国知名连锁品牌全市倒闭!会员退费怎么办?

天津人
2026-06-01 19:47:46
美国发话也不行,中方正式通告全球:打日本,中国具备“正当性”

美国发话也不行,中方正式通告全球:打日本,中国具备“正当性”

凤语谈
2026-05-28 12:13:58
看完CBA总决赛G3,才发现值得入选国家队的三人,张镇麟攻守兼备

看完CBA总决赛G3,才发现值得入选国家队的三人,张镇麟攻守兼备

阿纂看事
2026-06-01 16:23:53
顺德70后女老板,卖爆200万台咖啡机抢瑞幸饭碗,一年狂赚5个亿

顺德70后女老板,卖爆200万台咖啡机抢瑞幸饭碗,一年狂赚5个亿

商业人物志
2026-05-31 08:50:08
打麻将老是输,怎么办?牢记以下八个禁忌定会让你十赌九赢!

打麻将老是输,怎么办?牢记以下八个禁忌定会让你十赌九赢!

神奇的锤子
2024-08-21 16:19:33
首次公开电子干扰:荷兰军舰通信中断超12分钟,反制升到哪一级?

首次公开电子干扰:荷兰军舰通信中断超12分钟,反制升到哪一级?

荷兰豆爱健康
2026-05-31 12:02:55
长寿的人,手背多有这4个表现,占一个都不错,快看看你有几个?

长寿的人,手背多有这4个表现,占一个都不错,快看看你有几个?

芹姐说生活
2026-05-31 22:41:04
250亿元,赖清德偷窜代价曝光,岛内批:为牟取政治利益“自甘下跪”

250亿元,赖清德偷窜代价曝光,岛内批:为牟取政治利益“自甘下跪”

环球网资讯
2026-06-01 06:36:08
卡西:梅西让我失眠!那C罗呢?他只说四个字

卡西:梅西让我失眠!那C罗呢?他只说四个字

茅塞盾开本尊
2026-06-01 22:12:40
《亢奋》尺度大被骂,悉尼妹发大尺度照回应,男友出来力挺

《亢奋》尺度大被骂,悉尼妹发大尺度照回应,男友出来力挺

世界王室那些事
2026-06-01 18:47:05
专访高圆圆:没想过要一直演主角,一直有戏演就可以了

专访高圆圆:没想过要一直演主角,一直有戏演就可以了

南方都市报
2026-05-30 12:04:33
英伟达发布全新RTX Spark - 个人PC的新时代。

英伟达发布全新RTX Spark - 个人PC的新时代。

数字生命卡兹克
2026-06-01 15:07:36
2026-06-01 22:32:49
固件更新中
固件更新中
有态度网友ytd
5299文章数 40关注度
往期回顾 全部

科技要闻

黄仁勋演讲实录|40年来PC首次重设计!

头条要闻

媒体:郑丽文"两手空空"访美 被指有望见到特朗普

头条要闻

媒体:郑丽文"两手空空"访美 被指有望见到特朗普

体育要闻

杰威:如果我没受伤,我们能击败马刺

娱乐要闻

奚梦瑶婚礼现场图!一双儿女当花童

财经要闻

宇树过会,杭州赢麻了

汽车要闻

奇瑞集团5月销量24.8万辆 同比增长20.5% 出口18.2万辆再创新高

态度原创

房产
手机
健康
家居
旅游

房产要闻

100亿!1371亩!海口城市更新,再爆超级项目!

手机要闻

旅行拍照手机评测:Reno16如何成为兼顾续航与影像的性价比神机?

干细胞临床研究向患者收费?别踩坑

家居要闻

自信舒展 高背座椅

旅游要闻

逛故宫的游客注意了,坤宁宫明起检修请绕行

无障碍浏览 进入关怀版