mysql执行流程
2020-10-29 10:10:47 7 举报
mysql底层执行流程图
作者其他创作
大纲/内容
查询执行计划
other
查询缓存
用户
查询缓存命中直接返回
查询优化器
mysql服务器
myisam
词发分析语发分析解析成语法树
存储引擎
查询执行引擎,负责调用存储引擎api
解析器
1. 联接优化 对联接中的表重新排序 将外联接转换为内联接2. 排序优化 使用索引排序 内存快速排序 文件排序3. 优化COUNT() 没有Where子句的COUNT(*):记录表的行数。 COUNT(column) 统计column非NULL的行数,column不可能为NULL时,COUNT(column)优化为COUNT(*)4. 优化IN() 对IN()里面的数据排序,进行二分查找 5. 代数等价优化 简化并规范化代数表达式 ex: (a<b AND b=c) AND a=5 => b>5 AND b=c AND a=56 早期终结 指一旦满足查询的条件,MySQL就会立即停止处理该查询。 LIMIT 不可能的查询条件 取得唯一值或值不存在 ..........
解析树
data
客户端
预处理器
预处理sql 如某一条sql被反复执行,或者只是where字句值不同。每次经过解析器效率较低将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statement。一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。
查看是否开启查询缓存 SELECT @@query_cache_type;关闭查询缓存 set session query_cache_type=off;看看查询缓存是否可用 show variables like 'have_query_cache';查看查询缓存的大小 select @@global.query_cache_size;最大限制缓存大小 select @@global.query_cache_limit;设置查询缓存大小 set @@global.query_cache_size=1000000;查询缓存,将整个sql作为key判断查询缓存是否存在查询缓存失效:表结构或者数据发生改变时 insert update delete truncate alter table drop table drop database 会失效,查询缓存适用于大量相同查询,更新少的情况
sql
innodb
0 条评论
下一页