mysql查询执行过程

mysql的查询执行过程

  1. 查询缓存
    • 在执行一个查询语句前,若查询缓存打开,则mysql会检查这个查询语句是否命中查询缓存中的数据。若命中,则在检查一次权限后,返回查询结果
    • 查询缓存实际是一个key-value形式的缓存,通过一个哈希索引作为key(通过查询语句本身等计算出来)
    • 查询缓存在对应表作了变化后就会被清空,例如,如果向A表中插入数据,则和A表相关的缓存全部被清空
    • 查询缓存可能也会影响性能(如果缓存大且多,则在写表时,会造成短暂的系统僵死,因为要清空缓存)
  2. 语法解析和预处理(就是进行词法分析和语法分析)
    • 对sql语句进行解析,并生成一颗对应的解析树(就是根据语法规则解析sql,如果有错误则直接返回)
    • 预处理会根据mysql规则进一步检查解析树是否合法,比如检查要查询的数据表和数据列是否存在。
  3. 查询优化(优化器)
    • 优化器将查询转换为查询计划,一条查询可以有多种执行方式,最后都返回相应的结果。优化器的作用是找到这其中最好的执行计划。查询优化器是生成查询计划的子系统,该系统通常完全处于服务器端,根据要参与连接的表,数据读取方式(索引读取或表扫描)和索引选择等因素来指定查询计划。mysql是基于成本的优化器,其产生多个可供选择的多个执行计划,并从中选出最低成本的执行计划来优化一条sql语句
    • 优化器可以从数据字典中获取许多统计信息,例如表中的行数、表中的每个列的分布情况等。优化器可以根据这些信息选择有效的执行计划。
    • 即优化器会对表的统计信息进行评估,包括:每张表或者索引的页面个数、索引的基数、索引和数据行的长度、索引的分布情况等。
    • 一个最优的执行计划可能会:
      • 重新定义表的关联顺序
      • 优化MIN/MAX函数(如果该列有索引,直接通过索引获得)
      • 提前终止查询
      • 优化排序等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值