SQL Server遠程查詢的正確執(zhí)行方案介紹
以下的文章主要向大家講述的是SQL Server遠程查詢的正確執(zhí)行方案,SQL Server 數(shù)據(jù)庫的試圖主要是將評估分布式查詢的工作,使盡可能多地委派給 SQL 命令提供程序。如果 SQL 查詢只訪問存儲在提供程序數(shù)據(jù)源中的遠程表。
將從原始分布式查詢中析取該查詢并在提供程序上SQL Server遠程查詢執(zhí)行。這將減少從提供程序返回的行數(shù),并使提供程序得以在評估查詢時使用它的索引。
在多大程度上將原始分布式查詢委派給 SQL 命令提供程序的影響因素包括:
SQL 命令提供程序支持的專用語級別
SQL Server 僅在受特定的專用語級別支持時才委派操作。專用語級別由高到低為:SQL Server、SQL-92 Entry 級、ODBC core 和 Jet.專用語級別越高,SQL Server 可以給提供程序委派的操作就越多。
說明 當提供程序對應于 SQL Server 鏈接服務器時,使用 SQL Server 專用語級別。
每個專用語級別都是其下屬級別的超集。因此,如果將操作委派給某個級別,也就將它委派給了這一級之上的所有級別。
始終不將涉及下列各項的查詢委派給提供程序,總在本地對這類查詢進行評估:
- bit
- uniqueidentifier
下列操作/語法元素委派給對應的專用語級別(和所有更高的級別):
SQL Server:外聯(lián)接、CUBE、ROLLUP、模運算符 (%)、位運算符、字符串函數(shù)和算術系統(tǒng)函數(shù)。
SQL-92 Entry 級:UNION 和 UNION ALL。
ODBC 核心:帶 DISTINCT 的聚合函數(shù)和字符串常量。
Jet:不帶 DISTINCT 的聚合函數(shù)、排序 (ORDER BY)、內連接、謂詞、子查詢運算符(EXISTS、ALL、SOME、IN)、DISTINCT、在上級中沒提到的算術運算符、在上級中沒提到的常量、以及所有邏輯運算符。
例如,除涉及 CUBE、ROLLUP、外聯(lián)接、模運算符 (%)、位運算符、字符串函數(shù)和算術系統(tǒng)函數(shù)的操作外,將所有其它操作都委派給不同時也是 SQL Server遠程查詢執(zhí)行 的 SQL-92 Entry 級提供程序。
排序規(guī)則兼容性
對于分布式查詢,所有字符數(shù)據(jù)的比較語義由字符集和本地 SQL Server 的排序次序定義。Microsoft SQL Server 2000 支持多種排序規(guī)則(每一列的排序規(guī)則可以各不相同),每個字符值都具有相關聯(lián)的排序規(guī)則屬性。SQL Server 2000 解釋來自遠程數(shù)據(jù)源的字符數(shù)據(jù)的排序規(guī)則屬性,并相應地對其進行處理。
SQL Server 僅在可以確定下列條件時,才能將在字符列上的比較和 ORDER BY 操作委派給提供程序:
基礎數(shù)據(jù)源使用列的排序規(guī)則序列和字符集。
字符比較語義遵從 SQL-92(和 SQL Server)標準。
SQL Server 將根據(jù)"分布式查詢中的排序規(guī)則"主題中的表,確定每一列的排序規(guī)則。如果遠程數(shù)據(jù)源支持該排序規(guī)則,則提供程序被視為排序規(guī)則兼容。
其它 SQL 支持注意事項
SQL 專用語級別不規(guī)定下列 SQL 語法元素:
嵌套查詢支持
如果提供程序支持嵌套查詢(子查詢),則 SQL Server 將這些操作委派給提供程序。由于不能通過 OLE DB 屬性自動確定嵌套查詢支持,系統(tǒng)管理員應設置 NestedQueries 提供程序選項以向 SQL Server 表明提供程序支持嵌套查詢。
參數(shù)標記支持
如果提供程序通過在查詢中使用 ? 參數(shù)標記支持參數(shù)化查詢執(zhí)行,則 SQL Server 可以將參數(shù)化SQL Server遠程查詢執(zhí)行委派給提供程序。由于不能通過 OLE DB 屬性自動確定嵌套查詢支持,系統(tǒng)管理員應設置 DynamicParameters 提供程序選項以向 SQL Server 表明提供程序支持嵌套查詢。
【編輯推薦】