`
wtm_mac
  • 浏览: 88240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

充分利用 Explain 和 Profiling[转]

阅读更多
8.3  充分利用 Explain 和 Profiling

8.3.1  Explain 的使用(1)

说到Explain,肯定很多读者之前已经用过了,MySQL Query Optimizer 通过执行 EXPLAIN 命令来告诉我们它将使用一个怎样的执行计划来优化Query。所以,可以说 Explain 是在优化 Query 时最直接有效地验证我们想法的工具。在本章前面已经谈到,一个好的 SQL Performance Tuner 在动手优化一个 Query 之前,头脑中就应该已经有了一个好的执行计划,后面的优化工作只是为实现该执行计划而作出的各种调整。

在对某个 Query 优化过程中,须要不断地使用 Explain 来验证各种调整是否有效。就像前面很多示例都会通过 Explain 来验证和展示结果一样,所有的 Query 优化都应该充分利用它。

下面看一下在 MySQL Explain功能中展示各种信息的解释。

ID:MySQL Query Optimizer选定的执行计划中查询的序列号。

Select_type:所使用的查询类型,主要有以下这几种查询类型。

DEPENDENT SUBQUERY:子查询内层的第一个SELECT,依赖于外部查询的结果集。

DEPENDENT UNION:子查询中的UNION,且为UNION中从第二个SELECT开始的后面所有SELECT,同样依赖于外部查询的结果集。

PRIMARY:子查询中的最外层查询,注意并不是主键查询。

SIMPLE:除子查询或UNION之外的其他查询。

SUBQUERY:子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集。

UNCACHEABLE SUBQUERY:结果集无法缓存的子查询。

UNION:UNION语句中第二个SELECT开始后面的所有SELECT,第一个SELECT为PRIMARY。

UNION RESULT:UNION 中的合并结果。

Table:显示这一步所访问的数据库中的表的名称。

Type:告诉我们对表使用的访问方式,主要包含如下集中类型。

all:全表扫描。

const:读常量,最多只会有一条记录匹配,由于是常量,实际上只须要读一次。

eq_ref:最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问。

fulltext:进行全文索引检索。

index:全索引扫描。

index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。

index_subquery:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引。

rang:索引范围扫描。

ref:Join语句中被驱动表索引引用的查询。

ref_or_null:与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。

system:系统表,表中只有一行数据;

unique_subquery:子查询中的返回结果字段组合是主键或唯一约束。

Possible_keys:该查询可以利用的索引。如果没有任何索引可以使用,就会显示成null,这项内容对优化索引时的调整非常重要。

Key:MySQL Query Optimizer 从 possible_keys 中所选择使用的索引。

Key_len:被选中使用索引的索引键长度。

Ref:列出是通过常量(const),还是某个表的某个字段(如果是join)来过滤(通过key)的。

Rows:MySQL Query Optimizer 通过系统收集的统计信息估算出来的结果集记录条数。

Extra:查询中每一步实现的额外细节信息,主要会是以下内容。

Distinct:查找distinct 值,当mysql找到了第一条匹配的结果时,将停止该值的查询,转为后面其他值查询。

Full scan on NULL key:子查询中的一种优化方式,主要在遇到无法通过索引访问null值的使用。

Impossible WHERE noticed after reading const tables:MySQL Query Optimizer 通过收集到的统计信息判断出不可能存在结果。

No tables:Query 语句中使用 FROM DUAL或不包含任何 FROM子句。

Not exists:在某些左连接中,MySQL Query Optimizer通过改变原有 Query 的组成而使用的优化方法,可以部分减少数据访问次数。
分享到:
评论

相关推荐

    mysql优化(1)show命令 慢查询日志 explain profiling

    在本篇中,我们将聚焦于三个MySQL优化工具:`SHOW`命令、慢查询日志和`EXPLAIN`与`PROFILING`。 一、SHOW命令 `SHOW`命令是MySQL中的一个非常实用的工具,用于获取数据库系统的信息。它可以帮助我们查看数据库的...

    ORACLE EXPLAIN PLAN的总结

    Oracle的Explain Plan是数据库管理员和开发人员用来分析SQL查询执行计划的重要工具。它能提供关于如何执行SQL语句的详细信息,包括哪些操作(如全表扫描、索引访问等)将被使用,以及这些操作的预计成本、时间及资源...

    DB29.7Visual Explain教程

    **Visual Explain** 是 DB2 9.7 提供的一项强大工具,它使数据库管理员和开发人员能够更轻松地理解和优化查询性能。通过学习本文档,您应该能够掌握如何使用 **Visual Explain**,并利用它来提升数据库查询的效率。...

    Oracle中explain_plan的用法

    下面详细讲解 explain_plan 的用法和优点。 生成 explain_plan 的方法 要生成 explain_plan,需要运行 utlxplan.sql 脚本,以创建 plan 表,然后针对特定 SQL 语句,使用 explain plan set statement_id = 'tst1' ...

    LNH_MySQL 22-利用explain查看sql语句的执行计划.mp4

    LNH_MySQL 22-利用explain查看sql语句的执行计划.mp4

    Python-djangoexplain一个助手用于djangoqueryset取得EXPLAIN或EXPLAINANALYZEOUTPUT

    在数据库查询优化方面,`EXPLAIN`和`EXPLAIN ANALYZE`是数据库系统中用于分析SQL查询执行计划的重要工具,它们可以帮助我们理解查询如何在数据库中运行,以及如何改进性能。`django-explain`是一个针对Django框架的...

    SQL优化和SQL执行分析工具Explain的使用详解和示例

    SQL优化一直是数据库领域的重要话题,特别是在大数据量处理和高并发访问的场景下,优化后的SQL查询能够显著提升系统的响应速度和资源利用率。对于数据库管理员(DBA)和开发人员来说,掌握SQL优化技巧和工具是必不可少...

    SQL语句性能分析之explain

    4. **优化`WHERE`子句**:确保`WHERE`子句中使用的条件能够充分利用索引,从而减少需要扫描的数据量。 5. **理解`EXTRA`列**:仔细阅读`EXTRA`列中的信息,了解查询中是否存在潜在的问题或优化空间。 通过以上方法...

    MYSQL EXPLAIN详解

    - **利用 EXPLAIN 输出中的信息进行索引优化**: 例如,如果发现 MySQL 使用全表扫描而非索引扫描,可以通过创建适当的索引来改进查询性能。 - **使用 EXPLAIN 对 UNION 或子查询进行深入分析**: 通过分析 EXPLAIN ...

    mysql 中explain的详解

    在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让...

    MySQL explain 笔记整理

    - **Extended EXPLAIN**:除了基本的 EXPLAIN 之外,还可以使用 `EXPLAIN FORMAT=JSON` 或 `EXPLAIN EXTENDED` 来获得更详细的执行计划信息,包括 `ROWS_EXAMINED_PER_EXECUTION` 和 `filtered` 等统计信息。...

    explain plan interpreting

    在Oracle数据库系统中,"explain plan" 是一个关键的工具,用于分析和理解SQL查询的执行计划,也就是数据检索的路径。它可以帮助数据库管理员和开发人员优化查询性能,确保数据库高效运行。以下是对"explain plan ...

    DB2 Universal Database Visual Explain Tutoria.pdf

    7. **实践操作**:通过实际案例和练习,你将学会如何在DB2控制中心或命令行界面中启用和使用Visual Explain功能,以及如何解读和分析得到的结果。 总之,DB2 Universal Database Visual Explain Tutorial是一个宝贵...

    Oracle中EXPLAIN PLAN的使用技巧

    Oracle 中 EXPLAIN ...EXPLAIN PLAN 是 Oracle 中一个非常重要的诊断工具,能够帮助开发者和数据库管理员了解 SQL 语句的执行过程,并对其进行优化。通过使用 EXPLAIN PLAN,可以提高查询性能,提高系统的整体性能。

    Mysql Explain详细解析

    3. **使用 EXPLAIN ANALYZE**:在 MySQL 8.0.19 及更高版本中,可以通过 `EXPLAIN FORMAT=JSON` 或 `EXPLAIN ANALYZE` 来获取更详细的执行计划和性能数据。 4. **优化表结构**:如果 `EXPLAIN` 显示存在大量全表扫描...

    oracle explain plan总结

    ### Oracle Explain Plan 总结 #### 一、Oracle 执行计划的重要性 在Oracle数据库中,为了提高查询效率和系统性能,我们需要对SQL语句进行优化。优化的第一步就是理解SQL语句的执行计划。执行计划是指Oracle数据库...

    mysqlexplain.ppt

    MySQL的EXPLAIN命令是数据库管理员和开发者用来分析SQL查询执行计划的重要工具。它能帮助我们理解MySQL如何处理查询,从而优化查询性能。以下是对EXPLAIN命令及其相关知识点的详细解释。 1. **EXPLAIN调用方式**: ...

Global site tag (gtag.js) - Google Analytics