mysql架构图
登录mysql
mysql -h i p − P ip -P ip−Pport -u$user -p
查看连接mysql的线程
show processlist查看mysql服务正在连接的请求
最大空闲连接时间由mysql wait_timeout参数设置默认值8h
查询缓存
执行的sql语句和结果已key-value存在,存在缓存直接返回,不存在查询,在缓存。 ps:适用于静态表,数据基本不会变更的,db数据只要变更,会清除该表所有缓存。
你可以将参数 query_cache_type设置DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样
select SQL_CACHE * from T where ID=10; mysql8.0将缓存功能已移除
分析器
- “词法分析”:你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
- “语法分析”:根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法
优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序
执行器
- 校验权限
- 执行sql
Q:如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?
A:分析器阶段,mysql会在词法分析阶段分析,表是否存在,字段是否存在等
文章笔记来自极客时间《MySQL实战45讲》