`
中国爪哇程序员
  • 浏览: 167630 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

第四节 mysql 执行计划

阅读更多
SQL 是第四代编程语言。特点是并不关心实现细节,只关心想做些什么,需要什么东西。由于这个原因,并不清楚数据库是如何查询,有时写出的SQL往往执行效率低下。比如在一个表中建了索引,由于不注意细节,写出的SQL并不走索引。
通过执行计划可来检查SQL的执行。

这里对执行计划做了总结

首先建个user表,
CREATE TABLE `user` (
  `user_id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `age` int(11) default NULL,
  `depart_id` int(11) NOT NULL,
  PRIMARY KEY  (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |

做一个简单的执行计划:
mysql> explain  select * from user where name ='a';
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key        | key_len | ref   | rows | Extra       |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
|  1 | SIMPLE      | user  | ref  | index_name    | index_name | 512     | const |    1 | Using where |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
1 row in set

对上面的结果进行说明:

(1)id :包含一组数字,表示查询中执行select子句或操作表的顺序
      id相同,执行顺序由上至下
如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

(2)select_type:
    SIMPLE :简单表,没有表关联和子查询
     PRIMARY:主查询
     UNION :UNION中第二个或者后面的查询语句
     SUBQUERY:子查询第一个select
(3)table:查询语句中涉及的表名
(4)type:表的连接类型,按照执行效率由高到低,表示如下:
    system:
    const:
    eq_ref:
    ref:
    ref_or_null:
    inde_merge:
    unique_subquery:
    index_subquery:
    range:
    index:
    all:    
   具体含义可去MYSQL的官方网站查询
(5)possible_keys:指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
  (6)key:执行SQL真正用到的索引,如果没有使用索引,即为null
   (7)key_len:索引字段长度
   (8)rows:扫描行数
   (9)Extra:执行情况描述说明
  
个人觉得执行计划最大一点好处就是用来评测SQL是否走索引。如果没有走,可以分析原因。索引是用空间换时间,如果没有走索引,就白白浪费数据库宝贵的空间,更重要的是使SQL执行低下

关于type 描述,可参看附件,附件是在学习sql 执行计划时,搜到的一个很不错的PPT。在此感谢作者的分享。

分享到:
评论

相关推荐

    Dubbo视频教程--第46节:MySQL源码编译安装(CentOS-6.rar

    在本节"Dubbo视频教程--第46节:MySQL源码编译安装(CentOS-6.rar"中,我们将深入探讨如何在CentOS 6操作系统上通过源代码编译安装MySQL 5.6版本,同时也会涉及到这个过程与Dubbo框架的关联。MySQL是一个广泛使用的...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    第四部 MySQL乱码问题及字符集实战(14节) 01-MySQL数据乱码及多种解决方案实战1.avi 02-MySQL数据乱码及多种解决方案实战2.avi 03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-...

    MySQL数据库查询优化

    第4课 查询优化技术理论与MySQL实践(二)------子查询的优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每...

    vc2008 && MYSQL数据库平台开发文档第一节2013.11.15重新整理

    在本节中,我们将深入探讨如何使用Visual Studio 2008(简称VC2008)与MySQL数据库进行平台开发。2013年11月15日的更新内容着重于整合配套的MySQL数据库表,这为开发者提供了一个完整的开发环境,以便更好地理解和...

    MySql安装指南-英文版

    具体步骤可参考第1.14节“在Windows上升级MySQL”。 #### 安装步骤 1. **下载安装包**: - 访问MySQL官方网站下载最新版本的安装包。确保选择与您的操作系统匹配的版本。 - MySQL提供多种安装包选项,包括完整...

    第三节.反向生成代码,用来反向生成mysql pg

    本节我们将详细讨论如何利用MyBatis逆向工程来实现这一目标,以及针对MySQL和PostgreSQL数据库的具体操作。 首先,理解MyBatis的逆向工程(Reverse Engineering)机制。逆向工程是MyBatis提供的一种工具,可以从...

    邓炜PHP&MYSQL操作函数

    第一节 连接数据 (1)连接服务器 格式: mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]]) (2)选择数据库 格式: bool mysql_select_db ( ...

    MySQL第四讲[数据类型].rar

    在本节MySQL视频教程“第四讲:数据类型”中,我们将深入探讨数据库设计中的关键要素——数据类型。数据类型是数据库管理系统中定义列或变量所允许的值的种类,它决定了数据的存储方式、大小以及可以执行的操作。...

    基于MYSQL数据库的办公自动化系统实现与设计.docx

    ##### 第四节 论文结构安排 文章按照“绪论—理论基础—需求分析—系统设计—系统实现—结论”的逻辑顺序进行组织,每一部分都紧密相连,为读者提供了清晰的阅读路径。 #### 第二章:办公自动化系统概述 ##### 第...

    DbLinq-0.20.1带2018Mysql.data.dll + 连接字符串模版

    这个版本的DLL支持utf8mb4字符集,utf8mb4是MySQL中的一个变体,能完全支持Unicode,特别是包含四字节的Unicode字符,这对于处理多语言或者需要广泛Unicode支持的应用至关重要。 DbLinq的工作原理类似于微软的...

    yum安装mysql官方文档(支持各个版本)

    - **假设条件**:本节假定您的系统尚未通过第三方RPM包安装MySQL。如已安装,请参考“替换原生第三方MySQL发行版”部分。 - **安装命令**:使用以下命令安装MySQL Server和客户端: ``` sudo yum install mysql-...

    Mysql学习教程

    在教程的第四部分,"MySQL程序概述",介绍了MySQL的客户端和实用工具,如`mysql`命令行客户端,这是与数据库交互的主要工具。你可以使用它来连接到MySQL服务器,执行SQL查询并查看结果。`mysql`客户端支持批处理模式...

    Centos7 搭建apache+mysql+php环境

    因此,本节将指导您如何从源码编译安装 MySQL。 **第一步:上传 MySQL 及 CMake 安装包** 1. **安装 lrzsz**: ```bash # yum install lrzsz ``` 2. **安装 Xshell 或 SecureCRT**(以 Xshell 为例): - 使用...

    Learning PHP,MySQL and JavaScript (5th)

    本节内容将详细介绍该书的几个关键知识点,包括动态网页内容的概念、PHP语言、MySQL数据库管理系统以及JavaScript编程语言。 首先,动态网页内容是相对于静态网页内容而言的。静态网页内容是指那些不随用户交互而...

    MySQL数据库应用案例视频教程下载第16讲 性能优化.zip

    在本节"MySQL数据库应用案例视频教程下载第16讲 性能优化"中,我们将深入探讨MySQL数据库的性能调优技术,这是数据库管理员和开发人员必须掌握的关键技能。视频教程将通过实例演示如何最大化数据库的运行效率,减少...

Global site tag (gtag.js) - Google Analytics