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"中,我们将深入探讨如何在CentOS 6操作系统上通过源代码编译安装MySQL 5.6版本,同时也会涉及到这个过程与Dubbo框架的关联。MySQL是一个广泛使用的...
第四部 MySQL乱码问题及字符集实战(14节) 01-MySQL数据乱码及多种解决方案实战1.avi 02-MySQL数据乱码及多种解决方案实战2.avi 03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-...
第4课 查询优化技术理论与MySQL实践(二)------子查询的优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每...
在本节中,我们将深入探讨如何使用Visual Studio 2008(简称VC2008)与MySQL数据库进行平台开发。2013年11月15日的更新内容着重于整合配套的MySQL数据库表,这为开发者提供了一个完整的开发环境,以便更好地理解和...
具体步骤可参考第1.14节“在Windows上升级MySQL”。 #### 安装步骤 1. **下载安装包**: - 访问MySQL官方网站下载最新版本的安装包。确保选择与您的操作系统匹配的版本。 - MySQL提供多种安装包选项,包括完整...
本节我们将详细讨论如何利用MyBatis逆向工程来实现这一目标,以及针对MySQL和PostgreSQL数据库的具体操作。 首先,理解MyBatis的逆向工程(Reverse Engineering)机制。逆向工程是MyBatis提供的一种工具,可以从...
第一节 连接数据 (1)连接服务器 格式: mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]]) (2)选择数据库 格式: bool mysql_select_db ( ...
在本节MySQL视频教程“第四讲:数据类型”中,我们将深入探讨数据库设计中的关键要素——数据类型。数据类型是数据库管理系统中定义列或变量所允许的值的种类,它决定了数据的存储方式、大小以及可以执行的操作。...
##### 第四节 论文结构安排 文章按照“绪论—理论基础—需求分析—系统设计—系统实现—结论”的逻辑顺序进行组织,每一部分都紧密相连,为读者提供了清晰的阅读路径。 #### 第二章:办公自动化系统概述 ##### 第...
这个版本的DLL支持utf8mb4字符集,utf8mb4是MySQL中的一个变体,能完全支持Unicode,特别是包含四字节的Unicode字符,这对于处理多语言或者需要广泛Unicode支持的应用至关重要。 DbLinq的工作原理类似于微软的...
- **假设条件**:本节假定您的系统尚未通过第三方RPM包安装MySQL。如已安装,请参考“替换原生第三方MySQL发行版”部分。 - **安装命令**:使用以下命令安装MySQL Server和客户端: ``` sudo yum install mysql-...
在教程的第四部分,"MySQL程序概述",介绍了MySQL的客户端和实用工具,如`mysql`命令行客户端,这是与数据库交互的主要工具。你可以使用它来连接到MySQL服务器,执行SQL查询并查看结果。`mysql`客户端支持批处理模式...
因此,本节将指导您如何从源码编译安装 MySQL。 **第一步:上传 MySQL 及 CMake 安装包** 1. **安装 lrzsz**: ```bash # yum install lrzsz ``` 2. **安装 Xshell 或 SecureCRT**(以 Xshell 为例): - 使用...
本节内容将详细介绍该书的几个关键知识点,包括动态网页内容的概念、PHP语言、MySQL数据库管理系统以及JavaScript编程语言。 首先,动态网页内容是相对于静态网页内容而言的。静态网页内容是指那些不随用户交互而...
在本节"MySQL数据库应用案例视频教程下载第16讲 性能优化"中,我们将深入探讨MySQL数据库的性能调优技术,这是数据库管理员和开发人员必须掌握的关键技能。视频教程将通过实例演示如何最大化数据库的运行效率,减少...