Sql 使用空记录以避免左连接是否更好?

Sql 使用空记录以避免左连接是否更好?,sql,tsql,Sql,Tsql,为了简化我的案例,我使用了这个例子。我有一张桌子电脑和一张桌子状态。计算机有计算机的信息,并说明计算机的状态(等待修复等) 各表如下: 计算机(IDComputer,IDState,…) 状态(IDState、StateCode) 在某些情况下,计算机可能没有状态,因此Computers表中的IDState可以为null。这使得我在某些情况下不得不进行左连接查询 但是我在考虑在States表中有一个空状态的可能性。这将提高不使用左连接的性能,或者性能是相同的?我不认为状态上的左外部连接会严重影响

为了简化我的案例,我使用了这个例子。我有一张桌子电脑和一张桌子状态。计算机有计算机的信息,并说明计算机的状态(等待修复等)

各表如下:

计算机(IDComputer,IDState,…) 状态(IDState、StateCode)

在某些情况下,计算机可能没有状态,因此Computers表中的IDState可以为null。这使得我在某些情况下不得不进行左连接查询


但是我在考虑在States表中有一个空状态的可能性。这将提高不使用左连接的性能,或者性能是相同的?

我不认为状态上的左外部连接会严重影响性能:除非您有许多可能的状态。如果只有几个外部连接,则不会有很大的成本。 话虽如此,在尝试优化之前,您实际上应该找到证据:查看示例查询及其查询计划。查询计划看起来合理吗?您可能会在状态表上进行表扫描,但如果其中只有10行,而不是100行,那么您可能就没事了


话虽如此,我个人会添加一个“未知”状态(或任何合理的名称)。它使所有的编码变得更容易——不必记住必须使用外部联接,它也使查询更容易阅读。

我认为状态为左外部联接不会严重影响性能:除非您有许多可能的状态。如果只有几个外部连接,则不会有很大的成本。 话虽如此,在尝试优化之前,您实际上应该找到证据:查看示例查询及其查询计划。查询计划看起来合理吗?您可能会在状态表上进行表扫描,但如果其中只有10行,而不是100行,那么您可能就没事了


话虽如此,我个人会添加一个“未知”状态(或任何合理的名称)。它使所有的编码变得更容易——不必记住必须使用外部联接,它也使查询更容易阅读。

我认为状态为左外部联接不会严重影响性能:除非您有许多可能的状态。如果只有几个外部连接,则不会有很大的成本。 话虽如此,在尝试优化之前,您实际上应该找到证据:查看示例查询及其查询计划。查询计划看起来合理吗?您可能会在状态表上进行表扫描,但如果其中只有10行,而不是100行,那么您可能就没事了


话虽如此,我个人会添加一个“未知”状态(或任何合理的名称)。它使所有的编码变得更容易——不必记住必须使用外部联接,它也使查询更容易阅读。

我认为状态为左外部联接不会严重影响性能:除非您有许多可能的状态。如果只有几个外部连接,则不会有很大的成本。 话虽如此,在尝试优化之前,您实际上应该找到证据:查看示例查询及其查询计划。查询计划看起来合理吗?您可能会在状态表上进行表扫描,但如果其中只有10行,而不是100行,那么您可能就没事了


话虽如此,我个人会添加一个“未知”状态(或任何合理的名称)。它使所有的编码变得更容易——不必记住必须使用外部联接,它也使查询更容易阅读。

没有状态似乎是一种有效的“状态”。因此,我会为此设置一个
未分配
-状态。左连接有什么问题?为什么您觉得应该避免它们呢?左连接并没有什么不好的地方,但是同意@TimSchmelter没有状态是有效状态,所以应用程序应该注意分配它。没有状态似乎是有效的“状态”。因此,我会为此设置一个
未分配
-状态。左连接有什么问题?为什么您觉得应该避免它们呢?左连接并没有什么不好的地方,但是同意@TimSchmelter没有状态是有效状态,所以应用程序应该注意分配它。没有状态似乎是有效的“状态”。因此,我会为此设置一个
未分配
-状态。左连接有什么问题?为什么您觉得应该避免它们呢?左连接并没有什么不好的地方,但是同意@TimSchmelter没有状态是有效状态,所以应用程序应该注意分配它。没有状态似乎是有效的“状态”。因此,我会为此设置一个
未分配
-状态。左连接有什么问题?为什么您觉得应该避免它们呢?左连接并没有什么不好的地方,但是同意@TimSchmelter的观点,没有状态是有效状态,所以应用程序应该注意分配它。