哪个更优?加入 2 table 或在 table 中使用附加列

Which is more optimal? Join 2 tables Or Use an aditional column in a table

Table A1:

| id | name  | code | level |
|  1 | Anton | A111 |     2 |
|  2 | Berta | A112 |     5 |

Table B1:

| id | name  | code |
|  1 | Anton | A111 |
|  2 | Berta | A112 |

Table B2:

| id | code | level |
|  1 | A111 |     2 |
|  2 | A112 |     5 |

哪个更优?

使用Table A1(水平栏):

SELECT 'id,name' FROM A1 WHERE level=2;

通过连接(代码列)使用 Table B1 和 Table B2:

SELECT 'id,name' FROM B1 LEFT JOIN B2 ON B1.code=B2.code WHERE level=2;

谢谢你

您问题的一般答案是,最好使用两个单独的 table,而不是 joined/combined 版本 A1。这样做的原因是规范化的原则。考虑给定 name/code 匹配 多于一个级别的 的情况,例如这个 B2:

| id | code | level |
|  1 | A111 |     2 |
|  1 | A111 |     3 |
|  1 | A111 |     4 |
|  2 | A112 |     5 |

现在加入会产生以下结果table:

| id | name  | code | level |
|  1 | Anton | A111 |     2 |
|  1 | Anton | A111 |     3 |
|  1 | Anton | A111 |     4 |
|  2 | Berta | A112 |     5 |

注意以上table包含重复的信息。我们是replicating/storing三遍名字和代码。实际上,如果我们使用两个 table 版本,我们就可以避免这种额外的存储成本。

使用 A1 table 的一个可能理由是,如果您需要闪电般快速的查询来提取您的信息,并且您希望避免连接。但是,在你遇到这种情况之前,你会首先研究像索引这样的东西,在人们求助于非规范化 table 设计之前,它通常可以加快速度。

第一种情况(有一个 table)会工作得更快。 在第一种情况下你还有一个 varchar 键,SELECT 查询将比使用整数键慢。

如果您有两个 table 应该加入 SELECT 查询中,有时将链接 table 中的一些字段存储在第一个 [=20= 中可能是个不错的决定].

例如,您有一个带有字段 town_id 的用户 table 和一个带有 town_name 的城镇 table。 User中存储town名称查询用户信息和town名称会更快 table.