`
carrie_lynn
  • 浏览: 10236 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

mysql的执行计划--结果说明

阅读更多

mysql的执行计划:
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
使用方法,在select语句前加上explain就可以了:
如:explain select * from test1
EXPLAIN列的解释:
table:显示这一行的数据是关于哪张表的
type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
rows:MYSQL认为必须检查的用来返回请求数据的行数
Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢
extra列返回的描述的意义
Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)
system 表只有一行:system表。这是const连接类型的特殊情况
const:表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好
range:这个连接类型使用索引返回一个范围中的行,比如使用>或查找东西时发生的情况
index: 这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

 

本文来自ChinaUnix博客,如果查看原文请点: http://blog.chinaunix.net/u3/100752/showart_2032845.html

分享到:
评论

相关推荐

    mysql-connector-java-8.0.13.jar

    这个压缩包包含的“mysql-connector-java-8.0.13.jar”是这个驱动的实现文件,而“mysql-connector-java-8.0.13.jar.txt”可能是相关的说明或版本信息。 首先,我们来深入理解一下MySQL Connector/J的作用。JDBC...

    mysql-connector-java-8.0.26.jar

    此外,压缩包中还包含了一个名为"mysql-connector-java-8.0.26.jar.txt"的文本文件,这可能是MySQL Connector/J的使用说明、API文档或发布日志,提供了关于这个驱动的更详细信息,如如何配置、已知问题和解决办法等...

    mysql-connector-java-8.0.22.jar

    5. **性能优化**:通过优化网络通信和查询执行,提高与MySQL服务器交互的效率。 6. **错误处理**:提供了详细的错误和异常处理机制,帮助开发者快速定位和解决问题。 “mysql-connector-java-8.0.22.jar.txt”可能...

    mysql-connector-java-8.0.23.zip

    MySQL Connector/J提供了一个接口,使得Java应用程序能够执行SQL语句,处理结果集,管理事务,并实现其他数据库交互功能。 在"mysql-connector-java-8.0.23.zip"压缩包中,主要包含的就是`mysql-connector-java-...

    mysql-connector-java-8.0.23.jar

    同时,压缩包中的`mysql-connector-java-8.0.23.jar.txt`文件可能是关于驱动的使用指南、版本说明或授权信息,对于初学者来说,阅读这些文档有助于更好地理解和使用该驱动。 总的来说,MySQL Connector/J 8.0.23是...

    mysql-connector-j-8.0.33.zip

    1. `mysql-connector-java-8.0.33.jar`:这是核心的JDBC驱动文件,包含所有必要的类和方法,用于在Java应用程序中建立与MySQL服务器的连接,执行SQL语句,处理结果集等。 2. `README`:一般包含了关于驱动的基本...

    mysql-connector-java-5.1.34.jar

    `mysql-connector-java`驱动实现了这些接口,使得Java应用能够连接到MySQL服务器,执行SQL命令,并处理返回的结果。 在`mysql-connector-java-5.1.34.jar`这个特定的版本中,5.1系列是MySQL JDBC驱动的一个稳定版本...

    mysql-connector-java-8.0.27.jar

    `mysql-connector-java-8.0.27.jar.txt`可能是关于这个JAR文件的一些说明文档或日志,比如包含版本信息、更新内容、已知问题等。通常,官方发布的JAR文件会伴随README或CHANGES文件,以供开发者参考。 总之,`mysql...

    java mysql jar包mysql-connector-java-5.0.8-bin.zip

    `mysql-connector-java-5.0.8-bin.txt`可能是包含该驱动程序的说明、许可信息或版本详细内容的文本文件。这类文件通常提供关于软件使用的法律条款、版本历史和已知问题等信息,对于开发者来说,了解这些内容有助于...

    mysql-connector-java-5.0.3.zip

    对于使用这个版本的开发者来说,他们应当参考MySQL官方的发行说明来了解具体改动。 总的来说,"mysql-connector-java-5.0.3.zip"是MySQL数据库的Java驱动程序,它提供了Java应用程序与MySQL数据库之间的连接桥梁,...

    mysql-connector-java-8.0.24.jar

    此外,压缩包中还包括一个名为“mysql-connector-java-8.0.24.jar.txt”的文本文件,可能包含了关于驱动的详细信息,如发行说明、许可协议或其他重要更新内容。用户在使用驱动前,应仔细阅读这些信息,确保合规且...

    mysql-connector-java-8.0.21.jar

    附带的"mysql-connector-java-8.0.21.jar.txt"文件可能包含关于此JAR文件的使用说明、版权信息或发行说明。在实际使用中,可以查阅这个文本文件获取更详细的使用指南。 总的来说,MySQL Connector/J 8.0.21是Java...

    mysql-connector-java-5.1.7.zip

    使用MySQL Connector/J时,开发人员首先需要在Java代码中加载并注册这个驱动,然后创建一个数据库连接,执行SQL语句,并处理结果。例如,以下是一个简单的示例: ```java import java.sql.*; public class ...

    mysql-connector-java-8.0.20.jar

    `mysql-connector-java-8.0.20.jar.txt`文件可能是关于这个驱动的文档或说明,可能包含版本信息、使用指南、API参考等内容。阅读这个文本文件将有助于更深入地理解如何有效地利用这个驱动程序。 此外,MySQL ...

    mysql 驱动mysql-connector-c-6.0.2.tar.gz

    例如,`mysql_init()`用于初始化一个MYSQL结构体,`mysql_real_connect()`用于建立连接,`mysql_query()`用于执行SQL语句,`mysql_store_result()`用于获取查询结果等。 6. **错误处理**:在使用MySQL Connector/C...

    mysql-connector-java-5.0.8-bin.jar

    4. **结果集处理**:返回的结果集可以通过ResultSet接口进行遍历和处理,提取查询结果。 5. **数据库元数据获取**:提供DatabaseMetaData接口,可以获取关于数据库结构、表、列等信息。 6. **性能优化**:包括...

    mysql-connector-java-8.0.11.zip

    MySQL Connector/J是MySQL数据库与Java应用程序之间通信的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在MySQL数据库上执行SQL操作。标题中的"mysql-...

    mysql-connector-java-5.1.10-bin.jar

    总结起来,`mysql-connector-java-5.1.10-bin.jar`是Java应用程序连接MySQL数据库的关键组件,它提供了JDBC接口,使得开发者可以方便地执行SQL查询、管理数据库连接,从而实现数据的增删改查。了解和掌握其用法对于...

    mysql-connector-java-5.1.48.zip

    总的来说,MySQL Connector/J 5.1.48是Java开发者连接MySQL数据库的重要工具,它的使用涵盖了数据库连接、SQL执行、结果集处理等多个方面,是构建Java数据库应用不可或缺的一部分。通过理解和掌握这个驱动的工作原理...

    mysql-connector-odbc-5.1.5-win32.rar_ODBC MYSQL 1.5_mySQL ODBC_m

    一旦 ODBC 数据源创建成功,开发人员就可以在代码中使用相应的 API 或函数调用来建立连接,执行 SQL 语句,处理结果集,并关闭连接。这对于需要灵活数据库访问的项目来说,提供了极大的便利。 总的来说,MySQL ...

Global site tag (gtag.js) - Google Analytics