Оптимизация распределенных запросов

Для повышения производительности SQL Server выполняет следующие оптимизации, относящиеся к распределенным запросам:

  • Удаленное выполнение запроса при помощи поставщиков OLE DB SQL-команд.

    Подразумевается, что поставщик OLE DB является поставщиком SQL-команд, если он соответствует следующим минимальным требованиям:

    • Поддерживает объект Command и все его обязательные интерфейсы.

    • Поддерживает синтаксис DBPROPVAL SQL SUBMINIMUM или ISO на начальном уровне или выше либо ODBC на базовом уровне или выше. Поставщик должен обозначить этот уровень диалекта свойством OLE DB DBPROP_SQLSUPPORT.

  • Индексированный доступ при помощи поставщиков индексов OLE DB.

    Подразумевается, что поставщик OLE DB является поставщиком индексов, если он удовлетворяет следующим минимальным требованиям:

    • Поддерживает интерфейс IDBSchemaRowset для наборов строк схемы TABLES, COLUMNS и INDEXES.

    • Поддерживает открытие набора строк или индекса через интерфейс IOpenRowset по указанию имени индекса и имени соответствующей базовой таблицы.

    • Объект Index поддерживает все обязательные для него интерфейсы: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo и IConvertTypes.

    • Наборы строк, открываемые для индексированной базовой таблицы интерфейсом IOpenRowset, поддерживают интерфейс IRowsetLocate для позиционирования строк по закладке, полученной из индекса.

Удаленное выполнение запроса

SQL Server пытается делегировать выполнение как можно большей части распределенного запроса поставщику SQL-команд. Запрос, который производит доступ только к удаленным таблицам, находящимся в источнике данных поставщика, извлекается из исходного распределенного запроса и выполняется поставщиком. Это минимизирует число строк, возвращаемых от поставщика, и позволяет ему при выполнении запроса пользоваться индексами.

На то, в какой степени исходный распределенный запрос делегируется для выполнения поставщику команд SQL, влияют следующие факторы:

  • уровень диалекта, поддерживаемый поставщиком SQL-команд;

  • совместимость параметров сортировки.

Уровень диалекта, поддерживаемый поставщиком SQL-команд

SQL Server делегирует только те операции, которые поддерживаются имеющимся уровнем диалекта. Существуют следующие уровни диалекта, в порядке убывания от старшего к младшему: SQL Server, начальный уровень ISO, базовый ODBC и Jet. Чем выше уровень диалекта, тем больше операций SQL Server может делегировать поставщику.

ПримечаниеПримечание

Используется уровень диалекта SQL Server, если поставщиком является связанный сервер SQL Server.

Каждый из перечисленных уровней диалекта является надмножеством более низких уровней. Иными словами, если операция делегирована на каком-то определенном уровне, она также делегируется и на всех более высоких уровнях.

Запросы, включающие типы данных bit и uniqueidentifer, никогда не делегируются поставщику и всегда выполняются локально.

Если параметр SET CONCAT_NULL_YIELDS_NULL установлен в OFF, сцепление строк также всегда выполняется локально.

Следующие операторы и синтаксические элементы делегируются на обозначенный уровень диалекта и на все более высокие уровни:

  • SQL Server: внешние соединения, CUBE, ROLLUP, оператор получения остатка от деления (%), битовые операторы, символьные и системные арифметические функции.

  • Начальный уровень ISO: UNION и UNION ALL.

  • Базовый ODBC: статистические функции с ключевым словом DISTINCT и символьные константы.

  • Jet: статистические функции без ключевого слова DISTINCT, сортировка (ORDER BY), внутренние соединения, предикаты, операторы вложенных запросов (EXISTS, ALL, SOME, IN), DISTINCT, арифметические операции и константы, не упомянутые на более высоких уровнях, и логические операторы.

    Например, все операции, кроме тех, которые включают ключевые слова CUBE, ROLLUP, внешние соединения, оператор остатка от деления (%), битовые операции, символьные и системные арифметические функции, делегируются поставщику начального уровня ISO, отличному от SQL Server.

Совместимость параметров сортировки

Для распределенного запроса семантика сравнения для всех символьных данных определяется кодировкой и порядком сортировки локального экземпляра SQL Server. SQL Server поддерживает несколько параметров сортировки. Параметры сортировки могут быть заданы отдельно для каждого столбца, и каждое символьное значение имеет связанное с ним свойство параметров сортировки. SQL Server интерпретирует свойство режима сопоставления символьных данных из удаленного источника данных и обрабатывает его соответствующим образом. Дополнительные сведения о параметрах сортировки для удаленных столбцов см. в разделе Параметры сортировки в распределенных запросах.

SQL Server может делегировать операции сравнения и ORDER BY для символьных столбцов поставщику только в том случае, если тот сможет определить, что:

  • Столбец в источнике данных имеет ту же кодировку и параметры сортировки.

  • Семантика сравнения символов соответствует стандартам ISO и SQL Server.

Подраздел Параметры сортировки в распределенных запросах содержит сведения о том, как SQL Server определяют параметры сортировки для каждого из столбцов. Если удаленный источник данных поддерживает этот параметр сортировки, поставщик считает, что параметры сортировки совместимы.

Прочие вопросы поддержки SQL

Следующие элементы синтаксиса SQL не определяются ни одним из уровней диалекта SQL:

  • Поддержка вложенных запросов.

    Если поставщик поддерживает вложенные запросы (подзапросы), SQL Server может делегировать ему их выполнение. Поскольку поддержка вложенных запросов не может быть автоматически определена по свойствам OLE DB, системный администратор должен установить параметр поставщика NestedQueries, чтобы SQL Server мог определить, что вложенные запросы поддерживаются данным поставщиком.

  • Поддержка маркеров параметров.

    Если поставщик поддерживает выполнение параметризованных запросов с маркерами параметров ?, SQL Server может делегировать ему выполнение такого запроса. Поскольку поддержка маркеров параметров не может быть автоматически определена по свойствам OLE DB, системный администратор должен установить параметр поставщика DynamicParameters, чтобы SQL Server мог определить, что данный поставщик поддерживает маркеры параметров.

  • Поддержка оператора LIKE.

    Если поставщик поддерживает синтаксис и семантику оператора LIKE, как они реализованы в SQL Server, необходимо установить параметр поставщика SqlServerLike, чтобы указать, что поставщик поддерживает данную возможность.

    Дополнительные сведения об установке этих параметров поставщика см. в разделе Настройка поставщиков OLE DB для распределенных запросов.

Доступ к индексам

SQL Server может пользоваться стратегиями выполнения, которые включают применение индексов от поставщика индексов для вычисления предикатов и выполнения операций сортировки для удаленных таблиц. Для осуществления индексированного доступа к поставщику установите его параметр IndexAsAccessPath.

При использовании индексов, включающих символьные столбцы, установите параметр конфигурации для соответствующего связанного сервера collation compatible в значение true. Дополнительные сведения см. в разделе sp_serveroption (Transact-SQL).

ПримечаниеПримечание

Чтобы определить план выполнения конкретного распределенного запроса, выведите его в графическом виде в среде Среда SQL Server Management Studio. Если в плане присутствует удаленное выполнение, оно отображается логическим и физическим оператором Remote Query. Аргумент этого оператора содержит запрос, выполняемый удаленно.