以下的文章主要向大家讲述的是SQL Server远程查询的正确执行方案,SQL Server 数据库的试图主要是将评估分布式查询的工作,使尽可能多地委派给 SQL 命令提供程序。如果 SQL 查询只访问存储在提供程序数据源中的远程表。
将从原始分布式查询中析取该查询并在提供程序上SQL Server远程查询执行。这将减少从提供程序返回的行数,并使提供程序得以在评估查询时使用它的索引。
在多大程度上将原始分布式查询委派给 SQL 命令提供程序的影响因素包括:
SQL 命令提供程序支持的专用语级别
SQL Server 仅在受特定的专用语级别支持时才委派操作。专用语级别由高到低为:SQL Server、SQL-92 Entry 级、ODBC core 和 Jet.专用语级别越高,SQL Server 可以给提供程序委派的操作就越多。
说明 当提供程序对应于 SQL Server 链接服务器时,使用 SQL Server 专用语级别。
每个专用语级别都是其下属级别的超集。因此,如果将操作委派给某个级别,也就将它委派给了这一级之上的所有级别。
始终不将涉及下列各项的查询委派给提供程序,总在本地对这类查询进行评估:
- bit
- uniqueidentifier
下列操作/语法元素委派给对应的专用语级别(和所有更高的级别):
SQL Server:外联接、CUBE、ROLLUP、模运算符 (%)、位运算符、字符串函数和算术系统函数。
SQL-92 Entry 级:UNION 和 UNION ALL。
ODBC 核心:带 DISTINCT 的聚合函数和字符串常量。
Jet:不带 DISTINCT 的聚合函数、排序 (ORDER BY)、内连接、谓词、子查询运算符(EXISTS、ALL、SOME、IN)、DISTINCT、在上级中没提到的算术运算符、在上级中没提到的常量、以及所有逻辑运算符。
例如,除涉及 CUBE、ROLLUP、外联接、模运算符 (%)、位运算符、字符串函数和算术系统函数的操作外,将所有其它操作都委派给不同时也是 SQL Server远程查询执行 的 SQL-92 Entry 级提供程序。
排序规则兼容性
对于分布式查询,所有字符数据的比较语义由字符集和本地 SQL Server 的排序次序定义。Microsoft SQL Server 2000 支持多种排序规则(每一列的排序规则可以各不相同),每个字符值都具有相关联的排序规则属性。SQL Server 2000 解释来自远程数据源的字符数据的排序规则属性,并相应地对其进行处理。
SQL Server 仅在可以确定下列条件时,才能将在字符列上的比较和 ORDER BY 操作委派给提供程序:
基础数据源使用列的排序规则序列和字符集。
字符比较语义遵从 SQL-92(和 SQL Server)标准。
SQL Server 将根据"分布式查询中的排序规则"主题中的表,确定每一列的排序规则。如果远程数据源支持该排序规则,则提供程序被视为排序规则兼容。
其它 SQL 支持注意事项
SQL 专用语级别不规定下列 SQL 语法元素:
嵌套查询支持
如果提供程序支持嵌套查询(子查询),则 SQL Server 将这些操作委派给提供程序。由于不能通过 OLE DB 属性自动确定嵌套查询支持,系统管理员应设置 NestedQueries 提供程序选项以向 SQL Server 表明提供程序支持嵌套查询。
参数标记支持
如果提供程序通过在查询中使用 ? 参数标记支持参数化查询执行,则 SQL Server 可以将参数化SQL Server远程查询执行委派给提供程序。由于不能通过 OLE DB 属性自动确定嵌套查询支持,系统管理员应设置 DynamicParameters 提供程序选项以向 SQL Server 表明提供程序支持嵌套查询。
【编辑推荐】