某次组会分享的内容:mysql查询语句的底层执行mysql
链接器接收到客户端的链接请求响应主要包括5个步骤:算法
MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。作完了这些识别之后,就要作“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否知足 MySQL 语法。sql
其中,逻辑查询优化将生成逻辑查询执行计划。根据关系代数的原理,把语法分析树变为关系代数语法树的样式,原先SQL语义中的一些谓词变化为逻辑代数的操做符等样式
这些样式是一个临时的中间状态,通过进一步的逻辑查询优化,如执行常量传递、选择下推等(如一些节点下移,一些节点上移),从而生成逻辑查询执行计划。数据库
物理查询优化除了进行表的链接顺序调整外,还会使用代价估算模型对单个表的扫描方式、两表链接的链接算法进行评估,选择每一项操做中代价最小的操做为下一步优化的基础。物理查询优化的最终结果是生成最终物理查询执行计划。缓存
mysql的存储引擎 是按照插件的形式,提供一个接口给server层去用,这样的一个好处是,在执行器调用引擎接口的时候,咱们能够动态的扩展数据库存储引擎或者是动态组合存储引擎,可扩展性比较高。优化
若是中途没有update或者insert操做,是第二次查询的话,会直接去缓存区读取这个结果。避免了磁盘IO,大大提升了数据库处理查询的能力。插件
可是若是中途有update或者insert操做。在一个表上有更新的时候,跟这个表有关的查询缓存会失效,若是是写多读少的应用场景的话,效率比较慢。这也就是咱们通常不建议使用查询缓存的缘由命令行
query_cache_type=0时表示关闭,1时表示打开,2表示只要select中明确指定SQL_CACHE才缓存。3d
查看缓存运行状态 :好比你想执行某个查询以前,你能够查看缓存运行状态cdn