1. 首页 > 知识

MySQL中通过EXPLAIN如何分析SQL的执行计划详解

MySQL中通过EXPLAIN如何分析SQL的执行计划详解

前言在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。下面分别对EXPLAIN命令结果的每一列进行说明:。select_type:表示SELECT的类型,常见的取值有:类型说明SIMPLE 简单表,不使用表连接或子查询 PRIMARY 主查询,即外层的查询 UNION UNION中的第二个或者后面的查询语句 SUBQUERY 子查询中的第一个。
table:输出结果集的表(表别名)。type:表示MySQL在表中找到所需行的方式,或者叫访问类型。常见访问类型如下,从上到下,性能由差到最好:ALL全表扫描index 索引全扫描 range 索引范围扫描 ref 非唯一索引扫描 eq_ref 唯一索引扫描 const,system 单表最多有一个匹配行 NULL 不用扫描表或索引1、type=ALL,全表扫描,MySQL遍历全表来找到匹配行一般是没有where条件或者where条件没有使用索引的查询语句EXPLAIN SELECT * FROM customer WHERE active=0;2、type=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表一般是查询的字段都有索引的查询语句EXPLAIN SELECT store_id FROM customer;3、type=range,索引范围扫描,常用于<、<=、>、>=、between等操作EXPLAIN SELECT * FROM customer WHERE customer_id>=10 AND customer_id<=20;注意这种情况下比较的字段是需要加索引的,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引:EXPLAIN SELECT * FROM customer WHERE create_date>='2006-02-13' ;4、type=ref,使用非唯一索引或唯一索引的前缀扫描,返回匹配某个单独值的记录行store_id字段存在普通索引(非唯一索引)EXPLAIN SELECT * FROM customer WHERE store_id=10;ref类型还经常会出现在join操作中:customer、payment表关联查询,关联字段customer。
customer_id(主键),payment。customer_id(非唯一索引)。表关联查询时必定会有一张表进行全表扫描,此表一定是几张表中记录行数最少的表,然后再通过非唯一索引寻找其他关联表中的匹配行,以此达到表关联时扫描行数最少。因为customer、payment两表中customer表的记录行数最少,所以customer表进行全表扫描,payment表通过非唯一索引寻找匹配行。
EXPLAIN SELECT * FROM customer customer INNER JOIN payment payment ON customer。customer_id = payment。customer_id;5、type=eq_ref,类似ref,区别在于使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配eq_ref一般出现在多表连接时使用primary key或者unique index作为关联条件。
film、film_text表关联查询和上一条所说的基本一致,只不过关联条件由非唯一索引变成了主键。EXPLAIN SELECT * FROM film film INNER JOIN film_text film_text ON film。
film_id = film_text。film_id;6、type=const/system,单表中最多有一条匹配行,查询起来非常迅速,所以这个匹配行的其他列的值可以被优化器在当前查询中当作常量来处理const/system出现在根据主键primary key或者 唯一索引 unique index 进行的查询根据主键primary key进行的查询:EXPLAIN SELECT * FROM customer WHERE customer_id =10;根据唯一索引unique index进行的查询:EXPLAIN SELECT * FROM customer WHERE email ='MARY。
SMITH@sakilacustomer。org';7、type=NULL,MySQL不用访问表或者索引,直接就能够得到结果。possible_keys: 表示查询可能使用的索引。key: 实际使用的索引。key_len: 使用索引字段的长度。
ref: 使用哪个列或常数与key一起从表中选择行。。rows: 扫描行的数量。filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比)。Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息最主要的有一下三种:Using Index表示索引覆盖,不会回表查询Using Where 表示进行了回表查询 Using Index Condition 表示进行了ICP优化 Using Flesort 表示MySQL需额外排序操作, 不能通过索引顺序达到排序效果什么是ICP?MySQL5。
6引入了Index Condition Pushdown(ICP)的特性,进一步优化了查询。Pushdown表示操作下放,某些情况下的条件过滤操作下放到存储引擎。EXPLAIN SELECT * FROM rental WHERE rental_date='2005-05-25' AND customer_id>=300 AND customer_id<=400;在5。
6版本之前:优化器首先使用复合索引idx_rental_date过滤出符合条件rental_date='2005-05-25'的记录,然后根据复合索引idx_rental_date回表获取记录,最终根据条件customer_id>=300 AND customer_id<=400过滤出最后的查询结果(在服务层完成)。
在5。6版本之后:MySQL使用了ICP来进一步优化查询,在检索的时候,把条件customer_id>=300 AND customer_id<=400也推到存储引擎层完成过滤,这样能够降低不必要的IO访问。Extra为Using index condition就表示使用了ICP优化。
参考《深入浅出MySQL》总结。

相关推荐

  • 我想在成都贷款买辆车,请需要什么条件?

    我想在成都贷款买辆车,请需要什么条件?

    贷款,公司,证明,条件,担保,在成都买了房子,现在没钱购买车辆,请问可以申请地车抵押贷款吗?下面为你介绍三种购车贷款的方法:1、汽车金融公司贷款相对于银行汽车贷款来说,贷款申请门槛和手续都比较便捷,需要贷款者提供身份证、户口本、结婚证、房产证等复印件及居住证明和收入证明等材料。汽车金融公司贷款一般不要求是本地户口,也无需要担保,一般在4S店就可以办理。2、银行汽车贷款相对于汽车金融公司贷款和信用卡分期购车贷款方式来说,贷款者的自主性更强。...

  • 北京汽车抵押贷款需要满足的条件有哪些

    北京汽车抵押贷款需要满足的条件有哪些

    条件,北京,车辆,办理,有哪些,想在北京申请汽车抵押贷款,请问需要什么条件?汽车抵押贷款是一种融资的方式。另外汽车抵押贷款办理流程也是相对的简单,而且办理完汽车抵押贷款后车辆可正常使用。下面就为你解答一下北京汽车抵押贷款的条件以及所需的材料车辆抵押贷款条件1、要求申请人的年龄在25-55周岁,目前有稳定的收入;2、名下车辆证件齐全,当前无抵押情况;3、对于抵押的汽车。银行要求汽车车龄不到5年,行程不到8万公里;4、所抵押的汽车目前评估价值...

  • 天津房产怎么办理抵押贷款手续?

    天津房产怎么办理抵押贷款手续?

    办理,区域,借款人,条件,证明,需要什么材料?你好,天津房产抵押的条件有:1、 年龄18-70周岁;2、 房产在天津全境任何区域;贷款房全国任意区域均可;3、 普通住宅、别墅、商铺、办公楼、厂房均可操作;申请材料包括:1、 借款人个人身份证;2、 房产证;3、 户口本或居住证明;4、 银行流水。...

  • 天津企业抵押贷款需要什么流程??

    天津企业抵押贷款需要什么流程??

    企业,贷款,营业执照,中国人民银行,信用,企业急需资金周转,请问怎么申请企业抵押贷款?在天津申请企业d押贷款需要满足如下条件:1、有营业执照、税务登记证、代码证等。2、有中国人民银行核发的贷款卡,无不良信用记录。3、公司注册与营运1年以上,最近一年年营业额是贷款额的3倍以上。4、申请企业抵押贷款需提供的材料:企业基本资料:1、营业执照、组织机构代码证书、税务登记证、开户许可证、法人身份证 公司章程 验资报告 贷款卡(正反面复印)。2、董事...

  • 深圳房产抵押贷款申请条件要满足哪些?

    深圳房产抵押贷款申请条件要满足哪些?

    条件,贷款,偿还,经济,收入,在深圳有套房,请问如何申请房屋抵押贷款?房屋抵押贷款是需要一定的条件的,并不是申请了都能成功贷款,下面为你介绍一下房屋抵押贷款的条件:(1)有合法的身份;(2)有稳定的经济收入,有偿还贷款本息的能力,无不良信用记录;(3)有合法有效的购房合同;(4)以新购住房作最高额抵押的,须具有合法有效的购房合同,房龄在10年以内,且备有或已付不少于所购住房全部价款30%的首付款;(5)已购且办理了房子抵押贷款的,原房子抵...

  • 南京个人房产抵押贷款条件及办理流程介绍

    南京个人房产抵押贷款条件及办理流程介绍

    条件,南京,办理,自然人,身份,想在南京申请个人房产抵押,请问怎么办理?南京个人房产抵押贷款条件1、具有中华人民共和国国籍和完全民事行为能力的自然人;2、持有有效的身份证明文件;3、具有稳定、合法的收入来源;4、抵押房产有房地产证,产权明晰,可上市流通;5、银行规定的其他条件;房产抵押贷款条件:1、房屋抵押贷款要求房屋的年限在20年之内;2、房屋的面积要大于50平米;3、房屋要有较强的变现能力。4、房屋抵押贷款额度是房屋评估值的70%。5...

  • 在上海可以申请捷信贷款吗,如何申请呢?

    在上海可以申请捷信贷款吗,如何申请呢?

    贷款,驾驶证,银行卡,条件,交易,需要什么材料?在上海是可以申请捷信贷款的。首先要满足申请条件:1.中国公民,拥有身份证明;2.年龄在18—55周岁。满足基本条件就可以申请,流程如下:1.准备好贷款需要的证明文件:身份证原件、医保卡/社保卡、银行卡和交易回单、驾驶证、户口本、工牌等等。2.到附近的捷信贷款网点办理即可。...

  • 我在东莞,公积金贷款申请流程具体是怎样的?

    我在东莞,公积金贷款申请流程具体是怎样的?

    贷款,服务,大厅,条件,提交,有人知道吗?在东莞申请住房公积金贷款流程如下:1、借款申请人到中心综合服务大厅个人业务窗口或中心各委托贷款银行受理网点提交贷款申请资料,符合住房公积金贷款条件的录入贷款信息,不符合贷款条件的告知申请人。2、中心综合服务大厅复核人员核对申请资料,根据借款人个人信用报告和住房公积金贷款政策拟定贷款额度及期限。3、中心综合服务大厅负责人审批贷款申请,打印准予住房公积金贷款通知书。4、借款申请人持通知书与委托贷款银行...

  • 我办理住房按揭贷款,想要享受七折利率,请我需要具备哪些

    我办理住房按揭贷款,想要享受七折利率,请我需要具备哪些

    条件,贷款,利率,办理,有哪些,你好,我办理住房按揭贷款,想享受七折利率,请问我需要具备哪些条件? 有人知道吗?请问你的问题是“住房按揭贷款要享受七折利率的条件有哪些? ”,是吗?对于你的这个问题 ,我想说的是借款人的还款记录要良好,在近24个月内不能累计出现6次以上的逾期,也必须是首套自住房,更重要的是要有个好职业,要是公务员什么的保证7折。如果还有不懂的,可以咨询银行专业人员,我想他们会为你做详细介绍的。...

  • 想申请组合贷款买房,请需要什么条件?

    想申请组合贷款买房,请需要什么条件?

    组合,贷款,银行,条件,办理,想用组合贷款的方式买房,能详细解答一下组合贷款如何申请吗?组合贷款简而言之,就是公积金贷款和商业贷款同时使用,一般是在个人贷款超过当地规定的公积金贷款的高上限才使用的。申请方法:申请组合贷款,初审手续与公积金贷款相同。初审通过后,借款人到银行办理公积金贷款其它手续时,要按照银行要求填写商业贷款部分的借款申请表并办理有关手续。两部分贷款审批完成后,同时由银行拨付到售房单位账户。在组合贷款中,公积金贷款和商业贷款...

  • 请在哪些银行贷款可以打7折呢,都需要哪些手续呢?

    请在哪些银行贷款可以打7折呢,都需要哪些手续呢?

    银行,房贷,客户,优惠,条件,你好,在这里我想问下哪些银行贷款可以打7折呢,都需要哪些手续呢?需要具备什么条件吗?在银行新商品房基本都能打七折的,以前的房贷,你可以咨询银行,看看各银行存量房贷优惠情况 。在工商银行享受优惠是最低7折,但是你需要满足条件:享受7折优惠客户必须是原先享受8.5折的客户,且最近两年无逾期还款记录,140平方以下的首套住房,方可自动将优惠利率转为7折。 希望我的回答对你有所帮助。如果有不懂的话呢,可以咨询...

  • 北京商业贷款转公积金贷款的条件和流程?

    北京商业贷款转公积金贷款的条件和流程?

    借款人,条件,北京,所有权证,产权,在北京买房时用的是商业贷款,现在想转成公积金贷款,请问如何办理?你好,在北京申请商业贷款转公基金贷款应符合住房公积金个人贷款有关规定,同时还需满足以下条件:(一)借款人的商贷未还清。先还后贷方式的借款人须为商贷的借款人或产权共有人。以贷冲贷方式的借款人须为商贷的借款人。(二)商贷涉及的房屋所有权证应已办妥,并能办理抵押登记手续。(三)借款人具有稳定的经济收入,具备偿还贷款的能力,信用良好,能及时偿还商贷...