你们用过数据库联合索引优化排序功能吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ethusdt
0.01D
V2EX    数据库

你们用过数据库联合索引优化排序功能吗

  •  
  •   ethusdt 4 天前 1258 次点击

    后端小白在学习数据库,看到一篇文章介绍 order by 的工作原理,有一个例子很有趣:

    CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`) ) ENGINE=InnoDB; 

    这样的数据库表结构,查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄 的语句是 select city,name,age from t where city='杭州' order by name limit 1000 ;

    后面讲到数据库会执行全字段排序或者rowid 排序来返回结果。

    并且文章还讲了一个优化,使用联合索引来优化查询: alter table t add index city_user(city, name);,这样索引中 name 本身就是排序好的,数据库不需要再次执行排序工作,这对查询的性能来讲,可以增加不少。最后还讲到了覆盖索引继续优化一下这个场景: alter table t add index city_user_age(city, name, age);,这样数据库查询出来的结果包含所有的字段,也就是结果集就是我们要的最终结果,不需要往主键索引表中查询了。

    我是个后端新手,比较好奇这种优化,小公司用到过吗?我不清楚这是后端的基本能力还是 DBA 专业数据库工作者才需要掌握的优化技能。

    14 条回复    2025-10-18 01:58:00 +08:00
    luoyou1014
        1
    luoyou1014  
       4 天前   1
    最基本的技能,没有比这更基本的了
    ethusdt
        2
    ethusdt  
    OP
       4 天前
    @luoyou1014 哈哈哈哈 好吧,我太小白了。数据库开始设计的时候,就要把常用的查询条件列出来,然后建立联合索引/复合索引吗?
    ponder09
        3
    ponder09  
       4 天前
    @ethusdt 设计时很难考虑全的,当系统出现慢 sql 之后,再去针对 sql 加索引吧。
    pangdundun996
        4
    pangdundun996  
       4 天前
    属于合格后端的基本功,但实际上好些工作几年的后端都不会
    fengpan567
        5
    fengpan567  
       4 天前
    了解一下 mysql 查询回表
    encro
        6
    encro  
       4 天前   1
    数据库基本功:

    1,知道如何开启 slow log,
    2.知道 explain 以及查看慢查询,
    3,知道组合索引适用场景。
    iyaozhen
        7
    iyaozhen  
       4 天前
    算是基本功

    而且大厂 DBA 也不管你这玩意儿。没那么多闲心给你业务优化 sql ( vip 业务另说,更多是想分一杯羹吧 )。DBA 我感觉更多是 DB SRE 工作,比如怎么发现你这个慢 sql
    Mandelo
        8
    Mandelo  
       4 天前
    基本能力: 问 AI
    ethusdt
        9
    ethusdt  
    OP
       4 天前
    @Mandelo 掌握了这些才能问 AI 呀,要不然都是空白,根本不会去考虑这一个优化点。
    Ketteiron
        10
    Ketteiron  
       4 天前
    B+树、最左匹配,几乎是面试必考题。
    newaccount
        11
    newaccount  
       4 天前
    销售开始在群里大喊网站卡了
    你打开数据库监控发现 cpu 涨到 80%
    一看全特么是秒级的查询
    整个人头都大了,这又是哪位神仙新上了啥功能啊
    赶紧看看语句用索引覆盖顶一下,先缓过来这波再去优化查询
    deplives
        12
    deplives  
       4 天前
    不是,这个都算是数据库最基础的了吧?
    bronyakaka
        13
    bronyakaka  
       3 天前
    数据量太多加什么索引都没用
    itechify
        14
    itechify  
    PRO
       3 天前
    简单查询,一开始没做索引的话,几十万数据量加不加无所谓,现在机器能扛着,过百万了再考虑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4484 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:06 PVG 18:06 LAX 03:06 JFK 06:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86