zoukankan      html  css  js  c++  java
  • 一条查询SQL查询语句的执行原理

    先熟悉一下浅而易懂SQL执行的流程图SQL查询过程七步曲

      

    1.查询SQL发送请求

    客户端将查询sql按照mysql通信协议传输到服务端。服务端接受到请求后,服务端单起一个线程执行sql

    2.判断是否为select查询语句

    执行前mysql会通过命令分发器判断其是否是一条select语句(判断sql语句前6个字符是否为select);

    3.查询缓存先行

    MySQL在开启查询缓存的情况下,首先会先在查询缓存中查找该SQL是否完全匹配,如果完全匹配,验证当前用户是否具备查询权限,如果权限验证通过,直接返回结果集给客户端,该查询也就完成了。如果不匹配继续向下执行。

    4.语法分析之分析器
    如果在查询缓存中未匹配成功,则将语句交给分析器作语法分析。MySQL通过分析语法知道要查的内容。这步会对语法进行检验,如果语法不对就会返回语法错误中断查询。如果语法不正确

    You have an error in your SQL syntax

    5.查询之预处理器
    (1)分析器的工作完成后,将语句传递给预处理器,检查数据表和数据列是否存在,解析别名看是否存在歧义如果错误返回

    Unknown column xxx inwhere clause’

    (2)sql是否有该表的的操作权限;如果错误

    ERROR 1142 (42000): SELECT command denied to user 'root'@'localhost' for table 'xxx'

    6.查询之优化器

    语句解析完成后,MySQL就知道要查的内容了,之后会将语句传递给优化器进行优化(通过索引选择最快的查找方式),并生成执行计划。

    7.查询之执行器

    最后,交给执行器去具体执行该查询语句。执行器开始执行后,会逐渐将数据保存到结果集中,同时会逐步将数据缓存到查询缓存中,最终将结果集返回给客户端。

  • 相关阅读:
    stl_hash_set.h
    stl_hash_map.h
    stl_algobase.h
    stl_relops.h
    stl_algo.h
    VC6常用插件
    visual assist(VA)设置快捷键(其它安装的插件设置快捷键也在这里)
    SVN常用命令说明
    Android 调用相册 拍照 实现系统控件缩放 切割图片
    Android 一个3D相册源码
  • 原文地址:https://www.cnblogs.com/edda/p/14900528.html
Copyright © 2011-2022 走看看