falsh网站模板下载,邢台如何做企业网站,海南发展,宿州网站建设公司哪家好mysql 执行计划
简单来说#xff0c;mysql整体架构分为三块#xff1a;应用层#xff0c;逻辑层#xff0c;物理层 应用层#xff1a;负责与客户端交互#xff0c;建立连接#xff0c;返回数据#xff0c;响应请求。 逻辑层#xff1a;负责查询处理#xff0c;事务管…mysql 执行计划
简单来说mysql整体架构分为三块应用层逻辑层物理层 应用层负责与客户端交互建立连接返回数据响应请求。 逻辑层负责查询处理事务管理等 物理层实际物理磁盘上存储的文件主要有数据文件和日志文件
以查询为例 逻辑层接到应用层来的查询sql,立马开启一个线程对其进行处理 第一步查询处理器会对sql查询进行优化之后生成执行计划交给计划执行器 计划执行器访问更底层的事务管理器存储管理器来操作数据 最终通过物理层的文件获取到查询结构信息将结果响应给应用层
通过分析mysql的执行计划可以大致判断你写的sql的快慢
使用在select查询的前面加上explain就可以看到这条查询语句的执行计划比如 explain select id,name from user where id 123 执行完的结果分析 执行结果有12列挑重要的说
select_type
代表查询类型主要区分简单查询和各种复杂查询可能的值有 SIMPLE:简单SELECT(不使用UNION或子查询)
PRIMARY:最外面的SELECT
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT:UNION 的结果
SUBQUERY:子查询中的第一个SELECT
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:导出表的SELECT(FROM子句的子查询)
从调优的角度看我们一般要求这个只能是SIMPLE也就是说所有的查询都是单表查询拒绝子查询和表连接等复杂查询
type
访问类型这个是执行计划中最能直接看出sql性能好坏的一个字段可能的值有从最优到最差排序
system:表仅有一行(系统表)。这是const联接类型的一个特例。
const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!
eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。
ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。
ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。
index_merge:该联接类型表示使用了索引合并优化方法。
unique_subquery:该类型替换了下面形式的IN子查询的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。
index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)
range:只检索给定范围的行,使用一个索引来选择行。
index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
ALL:对于每个来自于先前的表的行组合,进行完整的表扫描说明查询就需要优化了。
一般来说得保证查询至少达到range级别最好能达到ref。