gpt4 book ai didi

mysql - JOIN 语句的数量如何影响查询的持续时间/获取时间?我有一个简单的、反直觉的例子

转载 作者:行者123 更新时间:2023-11-29 15:44:34 25 4
gpt4 key购买 nike

我正在使用 MySQL Workbench 为我的第一个 RDB 编写一些简单的查询。我将此特定查询保存为存储过程。在这样做的过程中,我发现了一个关于 JOIN 语句的数量和查询的持续时间/获取时间的意外结果。

最初,我(不小心)加入了 2 个表,而不是 3 个表(customers 表、devices 表和映射表 client_devices )。当我测试它时,我记录了持续时间和获取时间。当我意识到我的错误时,重新编写查询以包含另一个 JOIN 语句,并记录持续时间,我惊讶地发现尽管更加细致入微,但它花费了一半的时间......我很好奇为什么会这样。

-- 1) This is the first "flawed" query 

SELECT
first_name,
last_name,
email,
phone
FROM customers c
JOIN client_devices cd
USING (customer_id)
WHERE cd.device_id = target_device_id;
-- 2) This is the second, "correct" query   

SELECT
d.device_name,
first_name,
last_name,
email,
phone
FROM customers c
JOIN client_devices cd
USING (customer_id)
JOIN devices d
USING (device_id)
WHERE cd.device_id = target_device_id;

如果在运行这些查询之前有人问我,我会假设具有 2 个 JOIN 的较长查询肯定会比仅具有 1 个 JOIN 的较短查询花费更长的时间。但事实上,结果恰恰相反。

1) 第一次查询持续时间/获取时间

0.0011 秒/0.000011 秒

2) 第二次查询持续时间/获取时间

0.00068 秒/0.000010 秒

为什么会这样???

我真的很想了解这一点,因为我打算接受 DBA 角色的培训(最终哈哈)

PS-1:我使用的是每个表仅包含 5 条记录的微型数据集

PS-2:target_device_id 是此查询所属存储过程的 INT 参数。

谢谢。

最佳答案

I am using a micro dataset of only 5 records per table

如果您想成为一名 DBA,您需要学习的第一件事就是数据大小如何影响查询计划和查询执行。您无法从小数据集推广到大数据集。

更重要的是,通常情况下,更多的连接会导致更快的查询。主要原因是由于过滤。查询的持续时间取决于处理步骤的数量和正在处理的数据量。

例如,您始终可以将如下内容添加到查询中:

from a join
b
on . . . join
c
on . . . join
d
on 1 = 0

最终的join条件过滤掉所有行,因此结果集为空。这可能比没有该条件的查询快得多。

关于mysql - JOIN 语句的数量如何影响查询的持续时间/获取时间?我有一个简单的、反直觉的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57211427/

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