首页 > 数据库 >一条SQL查询语句是如何执行的?总结

一条SQL查询语句是如何执行的?总结

时间:2022-11-25 18:46:32浏览次数:68  
标签:语句 缓存 SQL 查询 sql 权限

学习《MySQL实战45讲》丁奇--第一篇 | 基础架构:一条SQL查询语句是如何执行的?总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1. MySQL的框架有几个组件, 各是什么作用?

说明:

MySQL可以分为 Server 层和存储引擎层两部分;
    Server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数;
        1)连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接;
            注:连接器判断用户通过后,是获取权限,而不是判断用户权限。
        2)查询缓存:对执行过的sql语句及其结果可能(缓存开启)会以 key-value 对的形式保存在内存中,key是sql语句,value是查询结果;
            注:只要有对一个表的更新,这个表上所有的查询缓存都会被清空;因此不建议在mysql8.0(不再有查询缓存)之前的版本中不建议使用mysql的查询缓存,除非某张表有很少的更新操作,可以将参数 query_cache_type设置成DEMAND,如果需要使用缓存可以显示的在SELECT语句后面使用SQL_CACHE开启当前sql语句的查询缓存功能。
        3)分析器:对SQL语句做解析。主要是看sql语句中的字段是否合法以及对sql语法检测;
        4)优化器:确定SQL语句的执行方案。决定使用哪个索引;决定各个表的连接顺序;
        5)执行器:判断用户对SQL语句中涉及到的表有没有执行的权限,权限充分,执行引擎提供的接口,查询或更新数据,返回结果,(更新缓存),否则,返回权限不足的错误。
    存储引擎层:负责数据的存储和提取。
2. 一个查询SQL语句执行的过程?

如上图所示:
    1)通过连接器判断用户名和密码是否正确,若失败,直接返回用户被拒的错误;否则获取用户权限信息;
    2)若查询缓存开启则通过sql语句查询缓存中是否有key为当前查询的sql,若存在,直接返回value,结束查询;
    3)若缓存无结果返回,那么通过分析器,对sql语句进行解析,若sql语句有误,返回语法错误信息,结束查询;
    4)sql语句正常经过分析器后,在优化器确认最终的执行方案,确定是用表中的索引以及表的连接顺序;
    5)当到达执行器的时候判断用户对sql中的表有没有权限操作,若没有返回权限不足的错误信息,否则,调用存储引擎提供的数据查询接口查询数据,若缓存开启,则更新缓存,最后将结果返回。
3. you have an error in your SQL syntax 这个保存是在词法分析里还是在语法分析里报错?
    应该是在词法分析时会报这个错,因为在词法分析时会匹配sql关键字和表名以及表结构字段。
4. 对于表的操作权限验证在哪里进行?
    连接器获取用户权限,执行器判断用户权限。

标签:语句,缓存,SQL,查询,sql,权限
From: https://www.cnblogs.com/xiedy001/p/16926036.html

相关文章

  • SQL语句
    SQL语句一、SQL语句查询关键字select 查询指定需要查询的字段信息select* 查询所有字段selectname 查询name字段selectchar_length(name)......
  • 用asp.net+Jquery+Ajax+sqlserver编写的 (英语六级记单词)
        英语的重要性已经毋庸置疑,对于程序员来说更甚,一些最新的技术资料是英文的,如果想进入外企英语也是一个很重要的条件。对于程序员来说怎样学习好英语,在此谈一下我......
  • MySQL查询关键字
    MySQL查询关键字目录MySQL查询关键字SQL语句查询关键字前期数据准备编写SQL语句的小技巧查询关键字之where筛选查询关键字之groupby分组查询关键字之having过滤查询关键......
  • SQL语句查询关键字
    目录SQL语句查询关键字1.SQL语句查询关键字2.前期数据准备3.查询关键字之where筛选4.查询关键字之groupby分组5.查询关键字之having过滤6.查询关键字之distinct去重7.查询......
  • 11月25日内容总结——sql查询关键字
    目录一、SQL语句查询关键字二、前期数据准备三、编写SQL语句的小技巧四、查询关键字之where筛选1.查询id大于等于3小于等于6的数据2.查询薪资是20000或者18000或者17000的......
  • mysql查询关键字与分组查询
    目录SQL语句查询关键字SQL语句查询关键字select 指定要查询的字段信息 select*查询所有字段 select字段名字 查询指定字段名字 selectchar_lengh(字段名)对......
  • SQL语句查询关键字
    目录SQL语句查询关键字select查询fromwhere筛选groupby分组having过滤distinct去重orderby排序limit分页regexp正则表达式编写SQL语句的小技巧多表查询的思路SQ......
  • MYSQL BUFFER POOL 参数说明及调优
    SHOWENGINEINNODBSTATUS'----------------------BUFFERPOOLANDMEMORY----------------------Totallargememoryallocated137428992bufferpool总大小Di......
  • SQL语句查询关键字:where筛选、group by分组、distinc去重、order by排序、limit分页
    目录SQL语句查询关键字前期数据准备编写SQL语句的小技巧查询关键字之where筛选查询关键字之groupby分组查询关键字之having过滤查询关键字值distinct去重查询关键字值orde......
  • MYSQL数据库之索引
    一、索引的概念索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。使用索引后可......