Прямое выполнение
Прямое выполнение — это наиболее распространенный способ выполнения инструкции. Приложение создает символьную строку, содержащую инструкцию 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 при возможности будет повторно использовать планы выполнения.