博客
关于我
mysql执行顺序与索引算法
阅读量:801 次
发布时间:2023-02-12

本文共 1094 字,大约阅读时间需要 3 分钟。

MySQL执行顺序与索引算法

书写顺序

MySQL查询的书写顺序遵循以下规则:

  • 必须字段

    • select:指定要查询的字段。
    • from:指定数据来源表。
  • 可选字段

    • distinct:去重。
    • join:表关联。
    • on:关联条件。
    • where:过滤条件。
    • group by:分组。
    • having:聚合后过滤。
    • sum、count、max、avg:聚合函数。
    • order by:排序。
    • limit:限制结果数量。
  • 执行顺序

    MySQL执行查询时遵循以下顺序:

  • from 阶段开始。
  • on 阶段处理关联条件。
  • join 阶段将相关表连接。
  • where 阶段过滤数据。
  • group by 阶段对数据进行分组。
  • having 阶段对聚合结果进行过滤。
  • select 阶段指定最终显示的字段。
  • distinct 阶段去重。
  • order by 阶段排序。
  • limit 阶段限制结果数量。
  • 提问解答

    Q:为什么字段别名不能在 where 中使用,但可以在 order by 中使用?

    A:

    • select 语句的执行顺序在 where 之后,因此在 where 阶段之前无法使用字段别名。
    • order by 阶段在 select 之后,可以使用字段别名。

    关键词含义

    from

    • 指定查询的数据表。

    join

    • 关联查询表。
    • 驱动表选择原则:优先选择结果集最少的表。

    on

    • 关联条件。

    where

    • 过滤数据。
    • 执行顺序:自下而上、从右到左。

    group by

    • 分组。
    • 执行顺序:从左到右。

    avg

    • 计算平均值。

    having

    • 聚合后过滤。

    select

    • 指定显示字段。

    distinct

    • 去重。

    order by

    • 排序。
    • 执行顺序:从左到右。

    limit

    • 截取结果。

    索引关联中使用的算法

    Nested-Loop join 算法

    • Simple Nested-Loop Join (SNLJ):驱动表记录与被驱动表全表匹配。
    • Index Nested-Loop Join (INLJ):基于索引进行匹配,减少匹配次数。
    • Block Nested-Loop Join (BNLJ):批量缓存匹配,减少内层表遍历次数。
    • Batched Key Access Join (BKAJ):利用索引排序,减少随机IO。

    Join Buffer

    • 缓存参与查询的所有列。
    • 默认缓存大小为256K。
    • 使用 optimizer_switch = block_nested_loop 控制性能。

    Offer突击训练营

    • 面试保障:提供offer保障。
    • 学习目标:15-20天掌握技术成果。
    • 项目经验:提供真实开发细节。

    点击了解更多

    转载地址:http://jbdfk.baihongyu.com/

    你可能感兴趣的文章
    Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
    查看>>
    new Blob()实现不同类型的文件下载功能
    查看>>
    New Concept English three (35)
    查看>>
    NEW DATE()之参数传递
    查看>>
    New Journey--工作五年所思所感小记
    查看>>
    new Queue(REGISTER_DELAY_QUEUE, true, false, false, params)
    查看>>
    New Relic——手机应用app开发达人的福利立即就到啦!
    查看>>
    new work
    查看>>
    new 一个button 然后dispose,最后这个button是null吗???
    查看>>
    NewspaceGPT的故事续写能力太强了
    查看>>
    NewspaceGPT绘制时序图
    查看>>
    NewspaceGPT绘制类图
    查看>>
    new一个对象的过程
    查看>>
    new和delete用法小结
    查看>>
    new对象时,JVM内部究竟藏了什么小秘密?
    查看>>
    new操作符的实现原理
    查看>>
    Next.js React Server Components 教程
    查看>>
    NextGen Mirth Connect XStream反序列化远程代码执行漏洞(CVE-2023-43208)
    查看>>
    next项目部署到服务器pm2进程守护
    查看>>
    nexus 介绍
    查看>>