gpt4 book ai didi

MySQL LEFT JOIN 与 2 个单独的查询(性能)

转载 作者:行者123 更新时间:2023-11-29 08:35:40 24 4
gpt4 key购买 nike

我有两个表:

++++++++++++++++++++++++++++++++++++
| Games |
++++++++++++++++++++++++++++++++++++
| ID | Name | Description |
++++++++++++++++++++++++++++++++++++
| 1 | Game 1 | A game description |
| 2 | Game 2 | And another |
| 3 | Game 3 | And another |
| .. | ... | ... |
++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++
| GameReviews |
+++++++++++++++++++++++++++++++++++++++
| ID |GameID| Review |
+++++++++++++++++++++++++++++++++++++++
| 1 | 1 |Review for game 1 |
| 2 | 1 |Another review for game 1|
| 3 | 1 |And another |
| .. | ... | ... |
+++++++++++++++++++++++++++++++++++++++

选项 1:

SELECT 
Games.ID,
Games.Name,
Games.Description,
GameReviews.ID,
GameReviews.Review
FROM
GameReviews
LEFT JOIN
Games
ON
Games.ID = GameReviews.GameID
WHERE
Games.ID=?

选项 2:

SELECT
ID,
Name,
Description
FROM
Games
WHERE
ID=?

然后 选择 ID, 审查 从 游戏评论 在哪里 游戏ID=?

显然,查询 1 会“更简单”,因为需要编写的代码更少,而另一个查询在数据库上似乎逻辑上“更容易”,因为它只查询 Games 表一次。问题是,当真正认真对待时,性能和效率真的有区别吗?

最佳答案

绝大多数情况下,选项 1 是最佳选择。除非您拥有大量数据,否则无法衡量两者之间的性能差异。保持简单。

你的例子也相当基本。在规模上,性能问题可能会根据过滤、连接和拉取的字段开始显现出来。理想的场景是仅提取索引中存在的数据(尤其是 InnoDB)。这通常是不可能的,但一种策略是在最后可能的时刻提取您需要的实际数据。这就是选项 2 所做的事情。

在极端规模下,您根本不想在数据库中进行任何联接。您的“连接”将在代码中发生,从而最大限度地减少通过网络发送的数据。使用选项 1,直到开始出现性能问题,而这种情况可能永远不会发生。

关于MySQL LEFT JOIN 与 2 个单独的查询(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315275/

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