美文网首页
44 | 答疑文章(三):说一说这些好问题

44 | 答疑文章(三):说一说这些好问题

作者: carlclone | 来源:发表于2019-06-27 19:35 被阅读0次

    知识点

    1 工作中会问好问题是一个重要的能力
    2 用 left join 不一定左表是驱动表
    3 多个条件 join 写 on 里和一个写 where 里一样 , 但是 left join 就不一样 , 因为左表不一定是驱动表
    4 a , b 表 f1 ,f2 字段 , a 的f1 有索引 , 4 条相同记录
    5 Block Nested Loop Join 算法 因为 b 表f1 无索引 b 是被驱动表
    6 BNL执行逻辑 1. 表 a 内容全部读入 join_buffer , 顺序扫描表 b , 每一行都判断 join 条件 , 满足则作为结果集返回 , 如果有 where 需要先判断 where 再返回 , 扫描完后 , 没有匹配上的补 NULL 再返回结果集
    7 一张 BNL 的图 ? 贴这里
    8 第二条语句以 b 为驱动表
    9 extra 什么都没写 , 表示使用 Index Nested Loop Join , NLJ
    10 NLJ 执行逻辑 : 顺序扫描表 b , 每一行到表 a 查 , 匹配到记录后再判断 f2=f2 , 满足则返回作为一条结果
    11 Q2 被优化器优化了
    12 NULL=NULL 结果为 NULL NULL!=NULL 结果也为 NULL 不是 true 所以不会作为结果集
    13 根据 12 知识点 , 此时的 left join 和 join 效果一致 , 被优化器改写为 join , 使用 NLJ 算法
    14 join 条件放 on 和 where 没有区别
    15 如果要 left join 语义则必须都放 on 里
    16 Simple Nested Loop Join 和 BNL 的性能对比 , BNL 更好 ?
    17 知识点 16 两个的执行逻辑是?

    18 把 groupby 当 distinct 用 , 有什么不同 , 答案是没有
    19 标准的 groupby 需要select 加聚合函数 如 count()
    20 此时的 distinct 和 groupby 执行逻辑 : 1 创建临时表 , a 字段建立唯一索引 , 遍历表 t , 插入临时表 , 有冲突则跳过 3 返回结果

    21 一个备库自增主键问题

    22 一个思考题

    相关文章

      网友评论

          本文标题:44 | 答疑文章(三):说一说这些好问题

          本文链接:https://www.haomeiwen.com/subject/wlrdcctx.html