博客
关于我
mysql执行顺序与索引算法
阅读量:803 次
发布时间: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/

    你可能感兴趣的文章
    Netty基础—1.网络编程基础一
    查看>>
    Netty基础—1.网络编程基础二
    查看>>
    Netty基础—2.网络编程基础三
    查看>>
    Netty基础—2.网络编程基础四
    查看>>
    Netty基础—3.基础网络协议一
    查看>>
    Netty基础—3.基础网络协议二
    查看>>
    Netty基础—4.NIO的使用简介一
    查看>>
    Netty基础—4.NIO的使用简介二
    查看>>
    Netty基础—5.Netty的使用简介
    查看>>
    Netty基础—6.Netty实现RPC服务一
    查看>>
    Netty基础—6.Netty实现RPC服务三
    查看>>
    Netty基础—7.Netty实现消息推送服务一
    查看>>
    Netty基础—7.Netty实现消息推送服务二
    查看>>
    Netty基础—8.Netty实现私有协议栈一
    查看>>
    Netty基础—8.Netty实现私有协议栈二
    查看>>
    Netty多线程 和 Redis6 多线程对比
    查看>>
    Netty学习总结(1)——Netty入门介绍
    查看>>
    Netty学习总结(2)——Netty的高性能架构之道
    查看>>
    Netty学习总结(3)——Netty百万级推送服务
    查看>>
    Netty学习总结(4)——图解Netty之Pipeline、channel、Context之间的数据流向
    查看>>