了解 MySQL 中 EXPLAIN 的结果

Understanding the result of EXPLAIN in MySQL

我有两个独立的查询,它们的输出相同。现在我想知道哪个更好?

查询 1:

| id | select_type | table | type | possible_keys |    key | key_len |    ref | rows |                                              Extra |
|----|-------------|-------|------|---------------|--------|---------|--------|------|----------------------------------------------------|
|  1 |      SIMPLE |    t1 |  ALL |        (null) | (null) |  (null) | (null) |    9 |                                        Using where |
|  1 |      SIMPLE |    t2 |  ALL |        (null) | (null) |  (null) | (null) |    9 | Using where; Using join buffer (Block Nested Loop) |

查询 2:

| id |        select_type | table | type | possible_keys |    key | key_len |    ref | rows |       Extra |
|----|--------------------|-------|------|---------------|--------|---------|--------|------|-------------|
|  1 |            PRIMARY |    t1 |  ALL |        (null) | (null) |  (null) | (null) |    9 | Using where |
|  2 | DEPENDENT SUBQUERY |    t2 |  ALL |        (null) | (null) |  (null) | (null) |    9 | Using where |

那么哪个更好,为什么?

我读到 EXPLAIN here,但我仍然不知道哪个参数重要?或者哪个参数告诉我这样的列需要索引,或者我的查询需要优化?

在上面的两个解释结果中,所有列都相同,除了:select_typeextra。那么哪个更好:

    • SIMPLE, SIMPLE
    • PRIMARY, DEPENDENT SUBQUERY
    • Using where, Using where; Using join buffer (Block Nested Loop)
    • Using where, Using where

编辑: 这是这两个查询:

查询 1:

SELECT t2.color FROM mytable t1
                JOIN mytable t2 ON t1.related = t2.id
                WHERE t1.id = '4'

查询 2:

SELECT t1.color FROM mytable t1
    WHERE exists (select 1 from mytable t2
             where t1.id =  t2.related
               and t2.id ='4')

重要的是这次时间是possible keys: NULL。也就是说,您没有索引。由于 table 只有大约 9 行,这不是性能问题。然而。该查询将命中大约 9*9 = 81 行。如果您的 table 达到 1000 行,那么将有 1000000 行命中 return 结果集。

使用数据库的第一步是了解键(索引)。

使用适当的索引,此查询应该触及大约 2 行,无论 table.

的大小如何

您可能需要 PRIMARY KEY(id)。如果您提供 SHOW CREATE TABLE mytable.

会对我们有帮助

A quick lesson on building indexes

了解 EXPLAIN 需要索引方面的基础知识。现在讨论 EXPLAIN 的意思还为时过早。