嗯,我知道如果这些数据库位于同一服务器和安全组中,则可以选择位于不同数据库中的连接表,如本问题中所述Can we use join for two different database tables?
我现在的问题是:与同一数据库中的select join相比,不同数据库中的select连接是否会产生性能问题?
答案 0 :(得分:4)
我真的不这么认为。因为它们位于同一服务器实例上。查询时:
Select * from sys.sysprocesses
,它将显示在所有数据库上在该特定服务器上运行的所有进程。因此,从某些方面来看,我们可以通过这样的方式思考,即每个数据库中的所有待处理进程都是同一服务器对进程步骤的贡献。此外,如果右键单击服务器实例,请选择Activity Monitor
,您可以看到Processes
和系统资源以及与该服务器性能相关的I / O,而不是数据库性能。
如果从actual or estimated execution plan
查看graphic icons
graphic execution plan
查询,则数据库级别和表级别没有此类图标。
您可以在此处找到所需的所有图形图标:
https://technet.microsoft.com/en-us/library/ms175913(v=sql.105).aspx
我认为当您从其他服务器实例加入相同的表时,它只会出现性能问题,因为即使它们是同一个表,从另一个服务器加入的逻辑也会发送查询并从服务器返回结果,这实际上取决于服务器的性能。例如,openquery()
和四部分分布式查询,例如[Server].[Database].[Schema].[NameOfObject]
。这些查询将从您当前的服务器发送到目标服务器,无论它是否有Where
条件,select *
都将在该服务器上执行,该服务器系统决定您获得多快的速度结果。