gpt4 book ai didi

mysql - 了解 MySQL 中 EXPLAIN 的结果

转载 作者:可可西里 更新时间:2023-11-01 07:43:52 25 4
gpt4 key购买 nike

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

查询 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。那么哪个更好:

    • 简单, 简单
    • PRIMARY, DEPENDENT SUBQUERY
    • 在哪里使用在哪里使用;使用连接缓冲区( block 嵌套循环)
    • 使用位置, 使用位置

编辑:这是这两个查询:

查询 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')

最佳答案

这次重要的是可能的键:NULL。也就是说,您没有索引。因为该表只有大约 9 行,所以这不是性能问题。然而。该查询将命中大约 9*9 = 81 行。如果您的表达到 1000 行,则将命中 1000000 行以返回结果集。

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

使用适当的索引,此查询应该触及大约 2 行,不管表的大小。

您可能需要 PRIMARY KEY(id)。如果您提供 SHOW CREATE TABLE mytable 将对我们有所帮助。

A quick lesson on building indexes

了解 EXPLAIN 需要索引基础。现在讨论 EXPLAIN 说的是什么还为时过早。

关于mysql - 了解 MySQL 中 EXPLAIN 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37390227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com