连接器
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:
select SQL_CACHE * from T where ID=10;
MySQL 8.0版本直接将查询缓存的整块功能删掉了
- 分析器做词法分析,检查是否有语法错误(做什么)
- 优化器决定了所使用的索引,各个表的连接顺序等,找到一个执行效率高的方案(怎么做)
- 执行器开始真正执行 SQL 语句,并将执行结果返回给用户