`
chenzehe
  • 浏览: 538207 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL查询分析器EXPLAIN或DESC

 
阅读更多

      MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况,如下需要计算2006年所有公司的销售额,需要关联sales表和company表,并且对money字段做求和操作,相应SQL如下:

EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: s
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1000
        Extra: Using where

*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: c
         type: ref
possible_keys: index_company_id
          key: index_company_id
      key_len: 5
          ref: sakila.c.company_id
         rows: 1
        Extra: Using where; Using index
 
 

    列的说明:

    select_type: 表示SELECT的类型,常见的有下面几种

        SIMPLE: 简单表,不使用连接或子查询的

        PRIMARY: 主查询,即外层的查询

        UNION: UNION中的第二个或者后面的查询语句

        SUBQUERY: 子查询中的第一个SELECT

 

    table: 输出结果集的表

 

    type: 表示表的连接类型,性能由好到差的连接类型为下面顺序

        system: 表中只有一行,即常量表

        const: 单表中最多有一个匹配行,如primary key或unique index

        eq_ref: 对于前面的每一行,在此表中只查询一条记录,也就是多表连接中使用primary key或unique index

        ref: 与eq_ref类似,区别在于不是使用primary key或unique index,而是使用普通索引

        ref_or_null: 与ref类型,区别在于条件中包含对null的查询

        index_merge: 索引合并优化

        unique_subquery: in的后面是一个查询主键字段的子查询

        index_subquery: 与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询

        range: 单表中的范围查询

        index: 对于前面的每一行,都通过查询索引来得到数据

        all: 对于前面的每一行,都通过扫描全表来得到数据

 

    possible_keys: 查询时可能用到的索引

 

    key: 查询时实际使用到的索引

 

    key-len: 索引字段的长度

 

    rows: 扫描行的数量

 

    Extra: 执行情况的说明和描述

 

    通过EXPLAIN的分析,确认在上面的例子中是对sales表的全表扫描导致效率不理想,通过对sales表创建索引:

CREATE INDEX index_sales_year ON sales(year);

 

    创建索引后,再对该查询语句分析如下:

EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: s
         type: ref
possible_keys: index_seles_year
          key: index_sales_year
      key_len: 2
          ref: const
         rows: 1
        Extra: Using where

*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: c
         type: ref
possible_keys: index_company_id
          key: index_company_id
      key_len: 5
          ref: sakila.c.company_id
         rows: 1
        Extra: Using where; Using index
 

 

分享到:
评论

相关推荐

    mysql进阶简明教程

    3. 查询优化器:理解MySQL如何选择执行计划,使用`EXPLAIN`分析查询性能。 通过本教程的学习,你将全面掌握MySQL的进阶知识,能够熟练地进行数据库设计、查询优化、事务处理以及性能调优。在实际项目中,不断实践和...

    MySQL基本知识点梳理和查询优化.pdf

    - **DESC或EXPLAIN**: 用于分析SQL执行计划。 - **EXTENDED EXPLAIN**: 结合SHOW WARNINGS命令可以查看实际执行的SQL语句。 **2. 提高性能的特性** - **索引覆盖**: 若查询所需数据全部存在于索引中,无需回表...

    性能加速器:MySQL中索引的创建与优化

    ### 性能加速器:MySQL 中索引的创建与优化 在数据库管理中,查询性能的提升是一个永恒的话题。为了实现高效的数据检索,索引作为一项关键技术被广泛应用。本文将深入探讨如何在 MySQL 中创建和管理索引,通过详细...

    MYSQL命令使用学习

    - `EXPLAIN`关键字分析SQL查询的执行计划,帮助优化查询效率。 - `SHOW STATUS;`显示服务器状态变量,监控性能。 - `SHOW VARIABLES;`查看系统变量,调整优化配置。 以上是MySQL命令使用的基础知识,实际应用中...

    mysql大纲资料.txt

    - `EXPLAIN`命令:分析查询计划,帮助识别性能瓶颈。 - 查询重写技巧:简化查询逻辑,减少不必要的子查询。 - **数据库维护**: - 备份与恢复:定期备份数据库,确保数据安全。 - 表优化:`OPTIMIZE TABLE table...

    MySQL性能优化方案总结1

    - `explain`或`desc`分析执行计划,理解查询如何使用索引。 - `show profile`分析SQL执行的各个阶段,找出耗时环节。 - MySQL 5.6及更高版本的`trace`功能,揭示优化器选择执行计划的原因。 - 定期分析和检查表...

    mysql5.6.19下子查询为什么无法使用索引

    1. **优化器选择的执行计划**:MySQL优化器可能会根据统计信息和成本估算选择不同的查询执行计划。在5.6.19版本中,优化器可能认为全表扫描比使用索引更划算,这可能是因为统计信息不准确或者优化器的策略有所改变。...

    MySQL命令行:数据库管理的瑞士军刀

    3. **查看查询性能**:分析 SQL 查询的执行计划。 ```sql EXPLAIN SELECT * FROM users WHERE username = 'john_doe'; ``` #### 十、安全和权限管理 1. **创建用户**:增加新的数据库用户。 ```sql CREATE ...

    MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    此外,还可以考虑其他优化策略,比如使用`EXPLAIN`分析查询计划,检查索引是否被有效利用,或者使用`INDEX` Hint指导优化器选择更优的索引。还可以考虑分批处理大数据,减少一次性返回的数据量,以及合理设计数据库...

    浅谈MySQL中的子查询优化技巧

    在实际应用中,应结合EXPLAIN分析查询计划,找出可能导致性能瓶颈的部分,并针对性地进行优化。同时,监控数据库性能,了解SQL执行的实时情况,也有助于及时发现和解决问题。通过上述方法,我们可以逐步提升MySQL...

    数据库SQL执行情况收集方法(1).docx

    数据库SQL执行情况收集是数据库监控和性能优化的重要环节,对于MySQL和...在分析过程中,可以结合其他工具和指标,如Explain Plan(Oracle)、EXPLAIN(MySQL)等,来深入理解SQL执行的细节,以便做出有针对性的优化。

    sql基础与优化吐血整理

    3. 分析器:解析SQL语句,确定其意图并检查语法。优化时应确保语句清晰无误,避免歧义。 4. 优化器:选择执行查询的最佳策略。优化器的选择可能影响查询效率,例如,决定使用哪个索引。 5. 执行器:执行查询并返回...

    MySQL针对Discuz论坛程序的基本优化教程

    可以使用`EXPLAIN`来查看查询计划,检查是否有合适的索引以及是否可以优化查询结构。在本例中,可能需要为`t.fid`、`p.tid`和`p.author`字段创建索引来提高查询效率。 综上所述,通过对MySQL数据库的引擎转换、缓存...

    线上问题处理常用SQL

    2. 错误诊断:利用EXPLAIN分析查询执行计划,找出慢查询的原因,如不正确的索引、全表扫描等。 3. 数据恢复:当线上数据出错时,可能需要回滚到某个时间点的数据,或者通过备份恢复。 4. 日志分析:分析数据库日志,...

    一份超级全面的PHP面试题

    - **查询优化**:避免使用SELECT *,减少JOIN操作,使用EXPLAIN分析SQL执行计划。 - **表设计优化**:合理设计数据库表结构,减少冗余字段。 - **缓存机制**:使用如Redis等缓存技术来存储常用查询结果,减少数据库...

    PHP面试题(最牛)

    使用EXPLAIN分析查询计划。 - **表结构优化**:合理设计表结构,如使用合适的数据类型减少存储空间消耗。 - **分区技术**:对大数据表进行分区处理,提高查询效率。 - **缓存机制**:使用缓存策略减轻数据库压力,如...

Global site tag (gtag.js) - Google Analytics