image.png
逻辑框架图

连接器

  1. mysql -h$ip -P$port -u$user -p
  • 因为命令会有历史记录,所以不建议在命令里面(-p 后面)输入密码
  • 用户名密码不对会收到一个”Access denied for user”的错误,然后客户端程序结束执行。
  • 用户名密码正确的话,会读取出该账号的权限,此后,在这个结束前,所有对权限的的控制都依赖于此时读取到的(即使管理员修改了权限,也不会造成影响)
  • 使用show processlist命令可以看到当前数据库的线程,Command列显示为Sleep的表示该线程及对应的连接空闲。
  • 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数wait_timeout控制的,默认值是8小时。
  • 使用长连接后,有些时候MySQL占用内存涨得特别快,这是因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的。
    • 解决方法:
    • 定期断开长连接
    • 通过执行mysql_reset_connection来重新初始化连接资源(不需要重连和重新做权限验证)

查询缓存

  • 缓存以 K-V 键值对的形式直接存储在内存里边
  • key 是查询的语句,value 是查询的结果
  • 查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
  • 可以设置默认不适用缓存,当需要的时候可以显式地指定,如下 SQL:

    1. select SQL_CACHE * from T where ID=10;
  • MySQL 8.0版本直接将查询缓存的整块功能删掉了


  • 分析器做词法分析,检查是否有语法错误(做什么)


  • 优化器决定了所使用的索引,各个表的连接顺序等,找到一个执行效率高的方案(怎么做)


  • 执行器开始真正执行 SQL 语句,并将执行结果返回给用户