जब आप एक join
में विशेष रूप से, इस तरह के [server].db.dbo.table
के रूप में एक 4-भाग नाम का उपयोग, अक्सर कई बार पूरे तालिका स्थानीय मशीन है, जो स्पष्ट रूप से आदर्श नहीं है करने के लिए तार पर नकल की जाती है।
OPENQUERY
का उपयोग करने के लिए एक बेहतर तरीका है - जिसे स्रोत (लिंक किए गए सर्वर) पर संभाला जाता है।
प्रयास करें:
SELECT *
FROM OPENQUERY([LINKEDSERVER], 'SELECT * FROM DB.TABLE.VIEW WHERE DATE>'2012-01-01')
AND ID IN (SELECT ID FROM MY_LOCAL_VIEW)
इस दृष्टिकोण से जुड़ा हुआ सर्वर तारीख> एक्स के लिए सभी पंक्तियों वापस आ जाएगी, और उसके बाद स्थानीय सर्वर को फ़िल्टर करते हैं अपने स्थानीय तालिका में आईडी के द्वारा के साथ
।
बेशक, इंडेक्सिंग अभी भी SELECT * FROM DB.TABLE.VIEW WHERE DATE>'2012-01-01
करने के लिए एक कारक खेलेंगे।
-- copy local table to linked server by executing remote query
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT ID INTO db.dbo.tmpTable FROM [SERVER].DB.DBO.MY_LOCAL_VIEW'
EXEC(@SQL) AT [LINKEDSERVER]
-- index remote table?!?
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'CREATE INDEX [IXTMP] ON db.dbo.tmpTable (ID)'
EXEC(@SQL) AT [LINKEDSERVER]
-- run query on local machine against both remote tables
SELECT *
-- INTO sometable
FROM OPENQUERY([LINKEDSERVER], 'SELECT *
FROM DB.TABLE.VIEW
WHERE DATE>''2012-01-01''
AND ID IN (SELECT ID FROM db.dbo.tmpTable)')
-- now drop remote temp table of id's
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'DROP TABLE db.dbo.tmpTable'
EXEC(@SQL) AT [LINKEDSERVER]
स्थानीय लोगों द्वारा देखे भी बड़ी है, तो:
एक और दृष्टिकोण है, जो मैं बड़े सबसेट पर उपयोग करते हैं, जैसे, दूरस्थ सर्वर से स्थानीय आईडी डंप तो दूर से यह सब संभाल करने, है आप रिमोट क्वेरी निष्पादित करने पर विचार कर सकते हैं जो स्थानीय मशीन पर ओपनक्वायरी का उपयोग करता है (मानते हैं कि रिमोट मशीन में एक लिंक के रूप में स्थानीय है)।
-- copy local table to linked server by executing remote query
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT ID INTO db.dbo.tmpTable FROM OPENQUERY([SERVER], ''SELECT ID FROM DB.DBO.MY_LOCAL_VIEW'')'
EXEC(@SQL) AT [LINKEDSERVER]
क्या विचार अनुक्रमित हैं? यदि नहीं, तो वे उप प्रश्न हैं? यदि नहीं, तो आप इन विचारों में एक इंडेक्स जोड़ सकते हैं। – Pricey
और विचारों को अन्य विचारों को कॉल करते हैं, एक लिंक किए गए सर्वर पर एक प्रदर्शन संख्या-नहीं espcially। – HLGEM
हां विचारों को ठीक से अनुक्रमित किया गया है। अगर मैं OPENQUERY का उपयोग करता हूं, तो क्या इससे कोई फर्क पड़ता है? या एसएसआईएस पैकेज? – arm