【发布时间】:2011-01-27 22:18:11
【问题描述】:
每次查看数据库图时,人们都会批评的一个领域是内部连接。他们认真地看着它们,并有疑问是否真的需要内部连接。
简单的库示例:
多对多关系通常在 SQL 中定义为三个表:Book、Category、BookCategory。
在这种情况下,Category 是一个包含两列的表:ID、CategoryName。
在这种情况下,我收到了关于 Category 表的问题,是否需要?是否可以将其用作查找表,并在 BookCategory 表中存储 CategoryName 而不是 CategoryID 以停止执行额外的操作内部联接。 (对于这个问题,我们将忽略任何CategoryNames的更改,删除)
问题是,内连接有什么不好的地方?在什么时候做它们是一件消极的事情(一般准则,如 # 事务、# 记录、# 语句中的连接等)?
【问题讨论】:
-
如果您在需要的地方使用它们,这对它们没有任何负面影响。实际上这是一件非常积极的事情:)
-
我从未听说过任何关于 INNER JOIN 的广泛否定声明。可以发个链接吗?
-
我会认真研究 outer join 语句!这些是潜在的性能杀手——当然不是内部连接.....
-
@John Saunders:我没有指向某个链接的链接,我收到了一位教授对我打开的作业的评论。它是关于示例中的关系。他说,因为 Category 表只添加了类别的实际名称,所以将名称移动到 CategoryName 并离开最后一个内部连接。
-
1) 您是否提倡删除
Category表?或者这是关于是否使用代理与自然主键的争论?
标签: sql performance inner-join