面试的时候遇到一道 mysql 的题,求解答 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
irisShaw
V2EX    问与答

面试的时候遇到一道 mysql 的题,求解答

  •  1
     
  •   irisShaw 2021-08-04 20:06:45 +08:00 2072 次点击
    这是一个创建于 1528 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面试官问,如果 mysql 中加了索引,并且强制让它走索引,最终没有走索引,如何排查。

    我说了一些索引失效的场景,他说排除索引失效的情况,让我结合 mysql 元数据和执行计划是如何生成的进行回答,网上找了一些相关资料,但是并没有思路,所以在社区里求各位大神解答 
    13 条回复    2023-08-25 16:19:42 +08:00
    tobias7
        1
    tobias7  
       2021-08-04 20:27:39 +08:00
    同等大神 回复
    F281M6Dh8DXpD1g2
        2
    F281M6Dh8DXpD1g2  
       2021-08-04 20:30:22 +08:00 via iPhone
    optimizer trace 看看就知道了
    wenqiang1208
        3
    wenqiang1208  
       2021-08-04 20:39:56 +08:00
    蹲一个
    ylsc633
        4
    ylsc633  
       2021-08-04 20:48:07 +08:00   1
    我试了下 数据就一千条

    强制走索引 explain 一下

    type = ALL

    这种算一种 case 吧
    SjwNo1
        5
    SjwNo1  
       2021-08-04 20:51:49 +08:00
    mysql server 有一套基于很多 magic number 的成本算法,可能是强行走索引成本预估更大吧。(猜的)
    SjwNo1
        6
    SjwNo1  
       2021-08-04 20:59:41 +08:00
    如 2 楼所说,打开 optimizer_trace,看一下各种执行方式对应的成本
    pt2021
        7
    pt2021  
       2021-08-04 22:55:46 +08:00
    答出来 MySQL 的成本计算这套呢,数据量少全表扫描更快,走索引会导致回表,这样呢
    Kimen
        8
    Kimen  
       2021-08-05 08:45:37 +08:00
    搜了一圈没找到,蹲一个答案
    NjcyNzMzNDQ3
        9
    NjcyNzMzNDQ3  
       2021-08-05 09:54:39 +08:00
    说一个实际遇到关于类型导致不走索引的。

    数据库内存时间戳,使用 char(13)。

    不走索引:where = 1628128272000
    走索引:where = ”1628128272000“

    不知道这个作为答案行不行。
    waitingChou
        10
    waitingChou  
       2021-08-05 11:17:10 +08:00
    一个比较常见的情况是,mysql 判断走索引的成本太高,还不如扫全表。

    一个典型的案例是,你的查询命中了索引 2/3 的数据, 如果走索引得先扫 2/3 的数据,然后这 2/3 的数据还得回表。相当于 扫了全表的 4/3 数据。

    但我不太确定这会不会 导致 force index 语法也不生效
    irisShaw
        11
    irisShaw  
    OP
       2021-08-05 19:59:23 +08:00
    @NjcyNzMzNDQ3 这个是隐式类型转换,也是索引失效场景的一种,我说了,然后被面试官否定了,应该他想问的不是这种
    54qyc
        12
    54qyc  
       2023-08-25 15:46:06 +08:00
    index hints 不就是强制走索引吗?写了 hint 优化器还能无视 hint ?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6075 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 03:19 PVG 11:19 LAX 20:19 JFK 23:19
    Do have faith in what you're doing.
    ubao 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