【发布时间】:2016-09-25 14:38:35
【问题描述】:
当我需要引用不同列上的相同数据时,我总是使用多个连接。像这样:
select
a.ContactName
,b.ContactName
,c.ContactName
from
OrderBase as o
left join ContactBase as a on o.contactid1 = a.ContactId
left join ContactBase as b on o.contactid2 = b.ContactId
left join ContactBase as c on o.contactid3 = c.ContactId
我一直认为这是非常低效的。为 3 次查找加载表 3 次。有没有更有效的方法来做到这一点?我不是指编写代码,而是使用资源。 在 SQL Server 的更高版本中是否有任何好的工具可以解决这个问题?
【问题讨论】:
-
如果您使用正确的索引,这应该是最好的方法...
-
联系人 1,2 和 3 需要 3 列。因此没有其他方法可以获得该结果。你的数据库有多大?如果它不够大,为什么你认为这没有效率。如果您有性能问题,您可以使用 schema_binding 视图进行此特定查询。它虽然使用磁盘存储。顺便说一句,我认为您的 ContacBase 表不应该很大。如果您的 ContactBase 表很大,添加索引会提高性能,否则不会有太大提升。
-
OrderBase 可以添加contactName1、contactName2、contactName3 并存储OrderBase 更新的位置。那么,就不需要加入了……
-
@daniel,你是说他应该存储冗余数据?!!
-
@daniel,在 OLTP 数据库中有冗余数据根本不是一个好主意。还有许多其他方法可以提高性能。
标签: sql sql-server-2012 query-optimization