mysql 系统优化常用sql(6、explain)

explain关键字可以模拟MySQL优化器执行SQL语句,可以很好的分析SQL语句或表结构的性能瓶颈。

在 MySQL 数据库中,EXPLAIN 关键字可用于查看查询语句的执行计划。该关键字可用于优化查询语句,可以帮助开发人员和 DBA 了解 SQL 查询语句的执行细节和性能瓶颈。

语法如下:

EXPLAIN SELECT statement;

查询语句可以是任何 SELECT 语句,包括 SELECT、UPDATE、DELETE 或 INSERT INTO…SELECT…等语句。使用 EXPLAIN 关键字来描述查询的执行计划与优化器的选择过程,它返回有关所选查询执行计划的信息,包括:

  • 查询使用了哪些索引
  • 表连接的顺序
  • 表连接的类型(更好的连接类型通常导致更好的性能)
  • 查询中每个表的行数
  • 每个表如何访问(是使用索引还是进行全表扫描)

例如,执行以下查询:

EXPLAIN SELECT * FROM users WHERE username = 'john.doe';

将返回执行此查询所需的细节信息,如查询使用的索引以及哪些类型的信息在哪些索引上使用,并且查询的表是否扫描。有足够的了解查询执行计划的详细信息,可以帮助开发人员找出哪里需要优化,并且可以更好地理解查询执行的速度和性能。

MySQL 的 EXPLAIN 命令返回一些查询执行计划相关的术语,包括:

  • id: SELECT 执行顺序的标识符。如果两次查询的 id 相同,则这两个查询执行的顺序相同。

  • select_type: 查询类型,表示语句的完整类型(查询、子查询、联合、派生表等)。

  • table: 显示此行数据是关于哪个表的。

  • partitions: 表在查询中被分区处理的情况。

  • type: 表示 MySQL 在表上执行查询的方式,即哪种类型的访问(full、ref、range、system、const等)。

  • possible_keys: 所有可能使用的索引列表,以逗号分隔。如果列表中有多个索引,则可能使用其中的任何一个或多个索引进行查询。

  • key: MySQL 实际决定使用可用索引的索引。如果没有显示任何索引,它被称为 NULL。

  • key_len: 表示 MySQL 在索引中使用的字节数。

  • ref: 表示 MySQL 根据所选索引从前一个表中找到匹配值的方式。

  • rows: 表示 MySQL 查询执行期间扫描的数据行数,或者是使用索引执行的行数。

  • Extra: 包含 MySQL 对查询的额外信息。常见的包括 “Using index”、“Using where”、“Using temporary”、“Using filesort” 等等。以下是各种查询类型的可能的 select_type 值。

    • SIMPLE: 简单 SELECT(不使用 UNION 或子查询)。
    • PRIMARY: 外部查询,即最外面的查询。
    • SUBQUERY: 排序时,使用子查询。
    • DERIVED: 衍生表,子查询中的临时表。
    • UNION: UNION 中的第二个或后面的 SELECT 语句。
    • DEPENDENT UNION: UNION 中第二个或后面的 SELECT 语句,依赖于外面的查询。
    • UNION RESULT: UNION 的结果。
    • DEPENDENT SUBQUERY: 子查询,依赖于外部查询。
    • DEPENDENT UNION: UNION 中第二个或后面的 SELECT 语句,依赖于外面的查询。

SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts最好。

你可能感兴趣的:(mysql,mysql,sql,数据库)