Otimizando consultas distribuídas

Para melhorar o desempenho, o SQL Server executa os seguintes tipos específicos de otimização para consultas distribuídas:

  • Execução de consulta remota usada com provedores de Comando SQL do OLE DB.

    Um provedor OLE DB será considerado um provedor de Comando SQL se o provedor OLE DB atender aos seguintes requisitos mínimos:

    • Oferecer suporte ao objeto Command e a todas as suas interfaces obrigatórias.

    • Oferecer suporte à Sintaxe DBPROPVAL SQL SUBMINIMUM ou ao ISO em Nível de entrada ou superior, ou ao ODBC no nível de Núcleo ou superior. O provedor deve expor esse nível de dialeto por meio da propriedade DBPROP_SQLSUPPORT OLE DB.

  • Acesso indexado usado com provedores de Índice OLE DB.

    Um provedor OLE DB será considerado um provedor de Índice se o provedor OLE DB atender aos seguintes requisitos mínimos:

    • Oferecer suporte à interface IDBSchemaRowset com os conjuntos de linhas de esquema de TABLES, COLUMNS e INDEXES.

    • Oferecer suporte à abertura de um conjunto de linhas em um índice usando IOpenRowset com a especificação do nome do índice e do nome da tabela base correspondente.

    • O objeto de Índice deve fornecer suporte a todas as interfaces obrigatórias: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfoe IConvertTypes.

    • Os conjuntos de linhas abertos em relação à tabela base indexada, usando IOpenRowset, devem oferecer suporte à interface IRowsetLocate para posicionar uma linha baseada em um indicador recuperado do índice.

Execução de consultas remotas

O SQL Server tenta delegar o máximo possível da avaliação de uma consulta distribuída ao provedor de Comando SQL. Uma consulta SQL que acessa apenas as tabelas remotas armazenadas na fonte de dados do provedor é extraída da consulta distribuída original e executada no provedor. Esse comportamento reduz o número de linhas retornadas do provedor e permite que o provedor use seus índices para avaliar a consulta.

Considerações que afetam quanto da consulta distribuída original é delegada ao provedor de Comando SQL incluem:

  • O nível de dialeto com suporte do provedor de Comando SQL

  • Compatibilidade de agrupamento

Nível de dialeto com suporte do provedor de Comando SQL

O SQL Server delegará operações apenas se elas tiverem suporte do nível de dialeto específico. Os níveis de dialeto, do superior para o inferior, são: SQL Server, Nível de Entrada ISO, núcleo de ODBC e Jet. Quanto mais alto o nível do dialeto, mais operações o SQL Server pode delegar ao provedor.

ObservaçãoObservação

O nível de dialeto do SQL Server é usado quando o provedor corresponde a um servidor vinculado do SQL Server.

Cada nível de dialeto é um superconjunto dos níveis inferiores. Portanto, se uma operação for delegada a um nível específico, a operação também será delegada a todos os níveis mais altos.

Consultas que envolvem os tipos de dados bit e uniqueidentifer nunca são delegadas a um provedor e sempre são avaliadas localmente.

Quando a opção SET CONCAT_NULL_YIELDS_NULL FIXO estiver OFF, a concatenação de cadeias de caracteres sempre é feita localmente.

Os elementos de operações/sintáticos seguintes são delegados ao nível de dialeto indicado e a todos os níveis mais altos:

  • SQL Server: Junção externa, CUBE, ROLLUP, operador módulo (%), operadores bitwise, funções de cadeia de caracteres e funções do sistema aritmético.

  • Nível de Entrada ISO: UNION e UNION ALL.

  • Núcleo de ODBC: Funções de agregação com DISTINCT e constantes de cadeia de caracteres.

  • Jet: Funções de agregação sem DISTINCT, ordenação (ORDER BY), junções internas, predicados, operadores de subconsulta (EXISTS, ALL, SOME, IN), DISTINCT, constantes e operadores aritméticos não mencionados em níveis superiores e todos os operadores lógicos.

    Por exemplo, todas as operações, exceto aquelas que envolvem CUBE, ROLLUP, junção externa, operador de módulo (%), operadores bitwise, funções de cadeia de caracteres e funções do sistema aritmético são delegadas a um provedor de Nível de entrada ISO que não é também SQL Server.

Compatibilidade de agrupamento

Em uma consulta distribuída, a semântica de comparação para todos os dados de caracteres é definida pelo conjunto de caracteres e ordem de classificação da instância local do SQL Server. O SQL Server oferece suporte a vários agrupamentos. Os agrupamentos podem ser diferentes em cada coluna, e cada valor de caractere tem uma propriedade de agrupamento associada. O SQL Server interpreta a propriedade de agrupamento dos dados de caracteres de uma fonte de dados remota e trata-a de maneira correspondente. Para obter mais informações sobre o agrupamento de colunas remotas, consulte Agrupamentos em consultas distribuídas.

O SQL Server pode delegar comparações e operações ORDER BY em colunas de caracteres a um provedor apenas se puder determinar o seguinte:

  • A fonte de dados subjacente usa a seqüência de agrupamento e conjunto de caracteres da coluna.

  • A semântica de comparação de caracteres segue a ISO e o SQL Server, padrão.

O tópico Agrupamentos em consultas distribuídas resume como o SQL Server determina um agrupamento para cada coluna. Se a fonte de dados remota oferecer suporte àquele agrupamento, o provedor será considerado compatível com o agrupamento.

Outras considerações sobre suporte do SQL

Os seguintes elementos da sintaxe SQL não são ditados pelos níveis de dialeto SQL:

  • Suporte a consultas aninhadas

    Se o provedor oferecer suporte a consultas aninhadas (subconsultas), o SQL Server poderá delegar essas operações ao provedor. Como o suporte a consultas aninhadas não pode ser determinado automaticamente nas propriedades do OLE DB, o administrador do sistema deve definir a opção de provedor NestedQueries para indicar ao SQL Server que o provedor oferece suporte a consultas aninhadas.

  • Suporte a marcadores de parâmetros

    Se o provedor oferecer suporte à execução de consultas parametrizadas usando o marcador de parâmetro ? em uma consulta, o SQL Server poderá delegar a execução de consultas parametrizadas ao provedor. Como o suporte a marcadores de parâmetros não pode ser determinado automaticamente nas propriedades do OLE DB, o administrador do sistema deve definir a opção de provedor DynamicParameters para indicar ao SQL Server que o provedor oferece suporte a marcadores de parâmetros.

  • Suporte a LIKE

    Se o provedor oferecer suporte ao operador LIKE conforme implementado na sintaxe e semântica do SQL Server, a opção de provedor SqlServerLike poderá ser definida para indicar suporte.

    Para obter mais informações sobre como definir essas opções de provedor, consulte Configurando provedores de OLE DB para consultas distribuídas.

Acesso indexado

O SQL Server pode usar estratégias de execução que envolvem o uso de índices do provedor de índice para avaliar predicados e executar operações de classificação em tabelas remotas. Para habilitar o acesso indexado em um provedor, defina a opção de provedor IndexAsAccessPath.

Além disso, ao usar índices que envolvem colunas de caracteres, defina opção de servidor vinculado compatível com agrupamento como true para o servidor vinculado correspondente. Para obter mais informações, consulte sp_serveroption (Transact-SQL).

ObservaçãoObservação

Exiba graficamente o plano de execução usando SQL Server Management Studio para determinar o plano de execução de uma determinada consulta distribuída. Quando execução de consulta remota é utilizada no plano de execução, ela é representada usando o operador lógico e físico de Remote Query. O argumento desse operador mostra a consulta executada remotamente.