首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JOIN语句的数量如何影响查询的持续时间/获取时间?我有一个简单的,反直觉的例子。

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

Stack Overflow用户
提问于 2019-07-26 07:45:49
回答 1查看 37关注 0票数 0

我正在使用MySQL工作台为我的第一个关系数据库编写一些简单的查询。我将这个特定的查询保存为一个存储过程。在这样做的过程中,我发现了一个意外的结果,即连接语句的数量和查询的持续时间/获取时间。

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

代码语言:javascript
复制
-- 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;
代码语言:javascript
复制
-- 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;

1)第一次查询时长/抓取时间

0.0011秒/ 0.000011秒

2)第二次查询时长/抓取时间

0.00068秒/ 0.000010秒

为什么会这样?

我真的很想理解这一点,因为我打算培训成一个DBA角色(最终笑)

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

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

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-07-26 09:31:01

我使用的是每个表只有5条记录的微型数据集

如果您想成为一名DBA,那么首先需要了解的一件事就是数据的大小如何影响查询计划和查询执行。你不能从一个小的数据集推广到一个大的数据集。

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

例如,您总是可以向查询中添加类似以下内容:

代码语言:javascript
复制
from a join
     b
     on . . .  join
     c
     on . . . join
     d
     on 1 = 0

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57211427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档