借助于EXPLAIN,你可以知道
1)你什么时候必须为表加入索引以得到一个使用索引找到记录的更快的SELECT。
2)你也能知道优化器是否以一个最佳次序联结表。为了强制优化器对一个SELECT语句使用一个特定联结次序,增加一个STRAIGHT_JOIN子句。
官方的关于explain的文档在http://dev.mysql.com/doc/refman/5.1/en/using-explain.html(英文)
mysql explain详解
Posted on 2010-05-19 by 54chen
mysql explain
使用的方法
EXPLAIN tbl_name
或:
EXPLAIN [EXTENDED] SELECT select_options
前者可以得出一个表的字段结构等等,后者主要是给出相关的一些索引信息,而今天要讲述的重点是后者。
举例
mysql> explain select * from event;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 | |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
各个属性的含义
id
select查询的序列号
select_type
select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。
table
输出的行所引用的表。
type
联合查询所使用的类型。
type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询至少达到range级别,最好能达到ref。
possible_keys
指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。
key
显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。
key_len
显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。
ref
显示哪个字段或常数与key一起被使用。
rows
这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。
Extra
如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。
如果是where used,就是使用上了where限制。
如果是impossible where 表示用不着where,一般就是没查出来啥。
如果此信息显示Using filesort或者Using temporary的话会很吃力,WHERE和ORDER BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。
常见的一些名词解释
Using filesort
MySQL需要额外的一次传递,以找出如何按排序顺序检索行。
Using index
从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
Using temporary
为了解决查询,MySQL需要创建一个临时表来容纳结果。
ref
对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取
ALL
完全没有索引的情况,性能非常地差劲。
index
与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
SIMPLE
简单SELECT(不使用UNION或子查询)
分享到:
相关推荐
同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常执行。 总的来说,这个工具对于那些需要在Oracle和MySQL之间迁移数据库应用的开发者来说,是一个非常实用的资源。它通过自动化处理减少...
本文将详细探讨几个关于优化SQL语句执行效率的重要注意事项,旨在帮助数据库管理员和开发者提升系统性能。 首先,理解索引的作用与创建策略是优化SQL的第一步。索引可以大幅提高数据检索速度,但并不是所有字段都...
标题中的“Excel生成MYSQL建表语句”是指利用JAVA编程技术,通过读取预先设计好的Excel模板,自动生成对应的MySQL数据库建表语句的过程。这个过程通常涉及到数据处理、文件读写以及数据库操作等核心技能。 首先,让...
在实际开发中,通过理解Java实体类和MySQL建表语句之间的关系,以及如何利用工具进行转换,可以大大提高开发效率,减少错误,并确保数据库模型与业务逻辑的一致性。文件`generatorTableSql`可能是用来存放自动生成的...
MySQL语法语句大全是一份详细的MySQL语法手册,涵盖了创建表、创建索引、改变表结构、删除数据对象、执行查询等MySQL语法语句的大量知识点。本手册旨在帮助开发者快速掌握MySQL语法,提高开发效率。 一、创建表 ...
在MySQL数据库管理中,识别和优化执行效率低的SQL语句是提高系统性能的关键环节。以下是一些关于如何查询和优化这些低效SQL语句的方法。 1. **记录低效SQL语句**: - 通过设置启动参数`–log-slow-queries`,可以...
以下将详细介绍如何根据MySQL的慢日志监控SQL语句执行效率,并提供启用和配置的相关步骤。 1. **启用慢查询日志** 要启用慢查询日志,首先需要在MySQL的配置文件`my.cnf`(通常位于`/etc/mysql/`)中进行设置。在`...
在探讨“mysql修改语句”的知识点时,我们主要聚焦于SQL中的UPDATE语句,这是数据库管理中最常用的命令之一,用于修改已存在的数据行。在给定的文件信息中,可以看到一系列重复的UPDATE语句,其目标是将多个表...
可以利用EXPLAIN命令来查看SQL的执行计划,包括执行顺序、扫描行数、是否使用索引等信息。 6. 索引的使用:合理创建和使用索引可以大大加快查询速度。但是不恰当的索引会降低写操作的性能。因此,了解如何选择合适...
《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。... ●学习使用不为常人所知的一些性能技巧来改进索引效率并简化SQL语句。
在数据库应用中,MySQL 查询效率对程序的执行速度有很大的影响。有效的处理优化数据库是非常有用的,尤其是大量数据需要处理的时候。以下是十个 SQL 语句优化技巧来提升 MYSQL 查询效率: 1. 优化 MySQL 查询缓存 ...
有了目录结构后,我们可以使用`pyodbc`或`mysql-connector-python`连接到MySQL服务器,并执行`CREATE DATABASE`语句来创建数据库。这通常涉及建立连接,构造SQL语句,然后调用`cursor.execute()`方法执行语句。 3....
事务处理语言(TPL)是用于管理SQL语句执行的事务,它包含BEGIN TRANSACTION、COMMIT和ROLLBACK三个语句。BEGIN TRANSACTION用于标记事务的开始,COMMIT用于确认事务中的操作,而ROLLBACK则用于撤销事务中的操作。 ...
标题提到的“如何查询mysql中执行效率低的sql语句”,通常我们可以通过以下方法来定位和分析低效的SQL: 1. **启用慢查询日志**:如描述中所述,配置`my.cnf`或`my.ini`文件,添加`--log-slow-queries`选项,这会...
标题提到的“如何查询mysql中执行效率低的sql语句”,这通常涉及到SQL性能分析。以下是一些关键知识点: 1. **慢查询日志**:MySQL提供了慢查询日志功能,通过在`my.cnf`或`my.ini`配置文件中添加`--log-slow-...
通过对General Log、Binary Log和Slow Query Log的了解和合理配置,可以极大地提高MySQL数据库的管理和维护效率,尤其是在性能调优、故障诊断以及数据安全方面。在日常运维中,根据具体需求选择性地开启这些日志,并...
"MySQL数据库后端语句执行监测工具"就是针对这一需求而设计的工具,它能够帮助我们跟踪、分析和优化SQL查询,从而提高数据库的效率。 1. **SQL日志监控**: MySQL提供了一些内置的日志功能,如慢查询日志(Slow ...
Python-MysqlMonitor是一款专为MySQL数据库设计的监控工具,它可以帮助用户实时跟踪和分析MySQL服务器上执行的SQL语句,从而优化数据库性能、定位问题和提升运维效率。这款工具主要面向数据库管理员和开发人员,通过...