zoukankan      html  css  js  c++  java
  • 一、当你按下回车键,一条查询语句会经历什么过程?

    写在前面

       当你敲出 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、执行器
      
      调用引擎提供的接口操作数据。如我们的查询,执行器会先判断当前用户是否有查询的权限,若没有则抛出错误,有则执行查询。
    

    写在最后

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

  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/onlyzc/p/12952648.html
Copyright © 2011-2022 走看看