• 一、当你按下回车键,一条查询语句会经历什么过程?


    写在前面

       当你敲出 select * from table where id = 1; Mysql都干了啥?所以说作为一个Mysql的重度使用的开饭人员,我们不仅需要写出很好的SQL语句。更要了解Mysql的工作流程。
    

    Mysql基本结构

    总的来说,我理解Mysql由客户端和服务端构成。而服务端由可以分为server层和存储引擎层两部分。接下来我们就讨论下服务端的两层结构。
    如下图:

      1、连接器
    
      负责跟客户端建立连接、获取权限、管理连接等。
      比如: mysql -uroot -h127.0.0.0.1  -P3306 -p
      mysql 是客户端工具,进行tcp连接后,验证输入用户的合法性。
    
      * 账密不对,直接返回 Access denied for user XXX的错误,并结束。
      * 账密正确,需要验证当前用户的权限,具体在 mysql库 User 表中体现。
      
      笔记点:当一个有读写权限的用户连接数据库,期间更改了此用户只用读权限。不会立即生效,需要重新连接才会生效。
    
      2、缓存查询
    
      当连接完成、便来到查询缓存这一步。当拿到一个select语句时候,会先看是否执行过该条语句。若执行过则可能会以key-value的形式存储在内存中。若在内存中找到则直接返回。
      如果没有缓存则执行接下来的流程,执行完以后也会缓存到内存(当然需要开启缓存)。
      
      当然了凡事都有利弊,当你的表是频繁更新的话,不建议开启缓存。
    
      Mysql提供一种按需使用的方式,就是将参数 query_cahce_type 设置为DEMAND, 这样默认就不会缓存结果。但是可以显式指定需要缓存的语句。 
      如: select SQL_CAHE * from table where id = 1;
    
      笔记点:Mysql8 取消了查询缓存这一块的功能。
      
      3、分析器
      
      这个就是1、分析sql的词法:如select 是查询、delete 是删除... 表名、字段名等。 2、语法分析:比如分析select 是不是打成了 selec这种。
      
      笔记点:当你看到 you have an error in your SQL syntax 提示。建议直接查看 user near 后面的内容。
      
      4、优化器
            
      分析器告诉了mysql你要做什么,优化器的作用是怎么做更好。比如索引的选取、连表顺序等。这个后面再细说。      
    
      5、执行器
      
      调用引擎提供的接口操作数据。如我们的查询,执行器会先判断当前用户是否有查询的权限,若没有则抛出错误,有则执行查询。
    

    写在最后

    敲字不易,转载请注明来源。谢谢!

  • 相关阅读:
    黑马程序员__线程
    java内部类、异常、包
    java面向对象
    java中字符串切割的方法总结
    md5可能会被破解咋办?
    Struts2使用拦截器完成权限控制示例
    关于Spring的Controller及Struts的Action的多线程的注意
    从打车软件你能想到多少?盈利模式?商机?大数据?移动互联网蛋糕?生活方式改变withApp?
    动态加载JS脚本的4种方法
    extjs Cannot read property 'dom' of null
  • 原文地址:https://www.cnblogs.com/onlyzc/p/12952648.html
Copyright © 2020-2023  润新知