Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL左连接与2个单独查询(性能)_Mysql_Performance - Fatal编程技术网

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,直到您开始出现性能问题,这可能永远不会发生