V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ethusdt
0.01D
V2EX  ›  数据库

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

  •  
  •   ethusdt · 1 天前 · 1095 次点击

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

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

    而且大厂 DBA 也不管你这玩意儿。没那么多闲心给你业务优化 sql ( vip 业务另说,更多是想分一杯羹吧 )。DBA 我感觉更多是 DB SRE 工作,比如怎么发现你这个慢 sql
    Mandelo
        8
    Mandelo  
       1 天前
    基本能力: 问 AI
    ethusdt
        9
    ethusdt  
    OP
       1 天前
    @Mandelo 掌握了这些才能问 AI 呀,要不然都是空白,根本不会去考虑这一个优化点。
    Ketteiron
        10
    Ketteiron  
       1 天前
    B+树、最左匹配,几乎是面试必考题。
    newaccount
        11
    newaccount  
       1 天前
    销售开始在群里大喊网站卡了
    你打开数据库监控发现 cpu 涨到 80%
    一看全特么是秒级的查询
    整个人头都大了,这又是哪位神仙新上了啥功能啊
    赶紧看看语句用索引覆盖顶一下,先缓过来这波再去优化查询
    deplives
        12
    deplives  
       1 天前
    不是,这个都算是数据库最基础的了吧?
    bronyakaka
        13
    bronyakaka  
       1 天前
    数据量太多加什么索引都没用
    itechify
        14
    itechify  
    PRO
       1 天前
    简单查询,一开始没做索引的话,几十万数据量加不加无所谓,现在机器能扛着,过百万了再考虑
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:52 · PVG 10:52 · LAX 19:52 · JFK 22:52
    ♥ Do have faith in what you're doing.