MySQL左连接与2个单独查询(性能)
我有两张桌子:MySQL左连接与2个单独查询(性能),mysql,performance,Mysql,Performance,我有两张桌子: ++++++++++++++++++++++++++++++++++++ | Games | ++++++++++++++++++++++++++++++++++++ | ID | Name | Description | ++++++++++++++++++++++++++++++++++++ | 1 | Game 1 | A game description | | 2 | Game 2 | And
++++++++++++++++++++++++++++++++++++
| 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=
显然,查询1在编写代码较少的情况下会“更简单”,而另一个在数据库上似乎在逻辑上更“容易”,因为它只查询一次
Games
表。问题是,当它真正深入到这一点时,在性能和效率方面是否真的存在差异?选择选项1,这正是RDBMS优化的目的。从客户机中点击一次数据库总比多次重复点击要好
我不相信你会有这么多的游戏和评论,所以选择选项2是有意义的。绝大多数时候,选项1是可行的。在获得大量数据之前,这两者之间的性能差异是无法衡量的。保持简单 你的例子也相当基本。在规模上,性能问题可以根据过滤、连接和提取的字段开始显现出来。理想的情况是只提取索引中存在的数据(特别是使用InnoDB)。这通常是不可能的,但是一个策略是在最后一个可能的时刻提取您需要的实际数据。这就是选项2要做的事情 在极端规模下,您根本不想在数据库中进行任何连接。您的“连接”将在代码中发生,从而最小化通过网络发送的数据。使用选项1,直到您开始出现性能问题,这可能永远不会发生