Поделиться через


Прямое выполнение

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Прямое выполнение — это наиболее распространенный способ выполнения инструкции. Приложение создает строку символов, содержащую инструкцию Transact-SQL, и отправляет ее для выполнения с помощью функции SQLExecDirect . Когда инструкция достигает сервера, SQL Server компилирует ее в план выполнения, а затем немедленно запускает план выполнения.

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

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

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

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

  • Не включайте константы данных в инструкции SQL. Вместо этого используйте маркеры параметров, привязанные к переменным программы. Дополнительные сведения см. в разделе Using Statement Parameters.

  • Используйте полные имена объектов. Планы выполнения не будут использоваться повторно при неполных именах объектов.

  • Соединения приложения по возможности должны использовать стандартный набор параметров соединений и инструкций. Планы выполнения, созданные для соединения с одним набором параметров (например ANSI_NULLS), не используются для соединения, имеющего другой набор параметров. Драйвер SQL SERVER NATIVE CLIENT ODBC и поставщик OLE DB SQL Server Native Client имеют одинаковые параметры по умолчанию для этих параметров.

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

См. также:

Выполнение инструкций (ODBC)