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


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

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

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

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

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

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

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

См. также

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