gpt4 book ai didi

mysql - 未使用连接的性能惩罚

转载 作者:可可西里 更新时间:2023-11-01 06:37:39 24 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本根据使用连接在一起的多个表的查询生成报告。脚本的输入之一将是报告所需字段的列表。根据请求的字段,可能不需要某些表格。我的问题是:如果在 SELECT 或 WHERE 子句中未引用联接,包含联接是否会对性能造成 [重大] 影响?

考虑下表:

mysql> SELECT * FROM `Books`;
+----------------------+----------+
| title | authorId |
+----------------------+----------+
| Animal Farm | 3 |
| Brave New World | 2 |
| Fahrenheit 451 | 1 |
| Nineteen Eighty-Four | 3 |
+----------------------+----------+

mysql> SELECT * FROM `Authors`;
+----+----------+-----------+
| id | lastName | firstName |
+----+----------+-----------+
| 1 | Bradbury | Ray |
| 2 | Huxley | Aldous |
| 3 | Orwell | George |
+----+----------+-----------+

SELECT
`Authors`.`lastName`
FROM
`Authors`
WHERE
`Authors`.`id` = 1

超越:

SELECT
`Authors`.`lastName`
FROM
`Authors`
JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`
WHERE
`Authors`.`id` = 1

?

在我看来,MySQL 应该知道完全忽略 JOIN,因为在 SELECT 或 WHERE 子句中没有引用该表。但不知何故,我怀疑情况是否如此。当然,这是一个非常基本的例子。实际涉及的数据会复杂得多。

实际上,这并不是什么大不了的事...我只需要知道我的脚本是否需要“智能”连接,并且仅在请求的字段依赖于它们时才包括它们。

最佳答案

这实际上并不是未使用的,因为它意味着结果集中只包含 Books 中存在的作者。

JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`

但是,如果您“知道”每个作者都存在于 Book 中,那么删除连接会带来一些性能优势,但这在很大程度上取决于表中的索引和记录数以及连接中的逻辑(尤其是当做数据转换)

关于mysql - 未使用连接的性能惩罚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859920/

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