MySQL 的 inner join 顺序是否会影响最后查询的性能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
857681664
V2EX    程序员

MySQL 的 inner join 顺序是否会影响最后查询的性能

  •  
  •   857681664
    zshnb 2022-08-02 22:12:57 +08:00 2722 次点击
    这是一个创建于 1236 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有表 a ( 100 条)表 b ( 50 条) 然后是以下 2 条 sql 语句

    select * from a inner join b --- select * from b inner join a 

    对于上面 2 条 sql,最后执行的速度会有区别吗?我记得 MySQL 的 join 是 nested loop 实现的,个人感觉应该没有什么区别吧。

    12 条回复    2022-08-05 14:37:06 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       2022-08-02 22:36:51 +08:00 via iPhone
    不会
    7911364440
        2
    7911364440  
       2022-08-03 11:43:19 +08:00
    用小表做驱动表可以减少被驱动表的访问次数,没有其他过滤条件的话还是 b 做驱动表好些
    zed1018
        3
    zed1018  
       2022-08-03 12:02:23 +08:00
    8 以后有 hash join
    enjoychen0318
        4
    enjoychen0318  
       2022-08-03 13:07:24 +08:00
    上面的两种写法,mysql 好像都会帮你优化成小表驱动大表的
    enjoychen0318
        5
    enjoychen0318  
       2022-08-03 13:11:29 +08:00
    驱动表对执行速度的影响可以看丁奇《 mysql45 讲》的第 34 讲
    iXInbo
        6
    iXInbo  
       2022-08-03 13:27:01 +08:00
    主要是小表驱动大表,如果反了可能会影响性能
    lazyfighter
        7
    lazyfighter  
       2022-08-03 16:00:39 +08:00
    我觉得 mysql 没必要设计的这么 low ,优化器应该会优化的
    akagishigeru
        8
    akagishigeru  
       2022-08-03 16:18:21 +08:00
    优化器回优化的,不用管
    857681664
        9
    857681664  
    OP
       2022-08-03 22:41:24 +08:00
    @enjoychen0318
    @7911364440
    @iXInbo
    如果单纯是 inner join 的话,感觉驱动表大小不会影响最后的结果吧,nested loop join 下,外面 for50 次,里面 for100 次跟外面 for100 次,里面 for50 次在 cpu 运算上好像没有区别,在数据量比较小的例子下,io 层面也是一样的消耗
    iPisces77
        10
    iPisces77  
       2022-08-04 00:48:14 +08:00
    优化器会优化,但还是要查一下执行计划
    iseki
        11
    iseki  
       2022-08-04 08:15:24 +08:00 via Android
    现在数据库基本都是 CBO 的,查执行计划吧,猜有点困难呐
    iXInbo
        12
    iXInbo  
       2022-08-05 14:37:06 +08:00
    一般这种优化都是次数上去了才会有明显的变化;比如外面 5000 次和 1000 次的对比,甚至几万几千万,
    可能原本几毫秒的差距会被放大成几秒和几十秒;
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1375 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:49 PVG 00:49 LAX 08:49 JFK 11:49
    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