我有兩臺服務器。一個是我的,另一個是另一個公司的。在第二臺服務器中,我不能創建任何數據庫或添加任何函數或存儲過程,但我需要返回信息以與數據庫交叉連接。與交叉連接的服務器連接
例如,
select fieldA, fieldB from localTBL l
left join linkedserver.remoteDB.dboremoteTBL r on l.ID = r.ID
或
select fieldA, fieldB from linkedserver.remoteDB.dboremoteTBL r
where r.ID in (select l.ID from localTBL l)
我這樣做,但表現得非常可怕。
是否有可能以更好的性能做到這一點?
我大多同意使用OPENQUERY的情緒,但這不像黑白聲音。使用分佈式查詢(linkedserver.database.schema.table)**可以**首先返回所有數據,並在tempdb中創建一個副本(如果它認爲合適),然後應用過濾器。這個答案聽起來像它會一直這樣做。 – GarethD
此外,分佈式查詢可以利用鏈接服務器上的統計信息,所以如果where子句意味着不會返回許多行,它將不會創建完整副本,並且會相應地調整任何進一步的交互(例如,可能會認爲嵌套循環連接比散列匹配更有效,因爲只有50行)。 OPENQUERY不能執行此操作,並且(AFAIK)始終假定將返回10,000行。這可能導致使用效率較低的連接回到其他數據。 – GarethD