Execução direta
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics
A execução direta é o modo mais básico de executar uma instrução. Um aplicativo cria uma cadeia de caracteres que contém uma instrução Transact-SQL e a envia para execução usando a função SQLExecDirect . Quando a instrução chega ao servidor, o SQL Server a compila em um plano de execução e, em seguida, executa imediatamente o plano de execução.
A execução direta normalmente é usada por aplicativos que compilam e executam instruções no tempo de execução e é o método mais eficiente para instruções que serão executadas de uma só vez. O problema com muitos bancos de dados é que a instrução SQL deve ser analisada e compilada sempre que é executada, o que adiciona sobrecarga se a instrução for executada várias vezes.
O SQL Server melhora significativamente o desempenho da execução direta de instruções comumente executadas em ambientes multiusuário e o uso de SQLExecDirect com marcadores de parâmetro para instruções SQL comumente executadas pode se aproximar da eficiência da execução preparada.
Quando conectado a uma instância do SQL Server, o driver ODBC do SQL Server Native Client usa sp_executesql para transmitir a instrução SQL ou o lote especificado no SQLExecDirect. O SQL Server tem lógica para determinar rapidamente se uma instrução SQL ou um lote executado com sp_executesql corresponde à instrução ou ao lote que gerou um plano de execução que já existe na memória. Se uma correspondência for feita, o SQL Server simplesmente reutilizará o plano existente em vez de compilar um novo plano. Isso significa que as instruções SQL comumente executadas com SQLExecDirect em um sistema com muitos usuários se beneficiarão de muitos dos benefícios de reutilização de plano que estavam disponíveis apenas para procedimentos armazenados em versões anteriores do SQL Server.
Esse benefício de reutilizar planos de execução só funciona quando vários usuários estiverem executando a mesma instrução ou lote SQL. Siga estas convenções de codificação para aumentar a probabilidade de as instruções SQL executadas por clientes diferentes serem semelhantes a ponto de permitirem a reutilização de planos de execução:
Não inclua constantes de dados nas instruções SQL; em vez disso, use marcadores de parâmetro associados para programar variáveis. Para obter mais informações, consulte Usando parâmetros de instrução.
Use nomes de objeto totalmente qualificados. Os planos de execução não serão reutilizados se os nomes de objeto não forem totalmente qualificados.
Faça com que as conexões de aplicativo usem, na medida do possível, um conjunto comum de opções de conexão e instrução. Os planos de execução gerados para uma conexão com um conjunto de opções (como ANSI_NULLS) não são reutilizados para uma conexão que tenha outro conjunto de opções. O driver ODBC do SQL Server Native Client e o provedor OLE DB do SQL Server Native Client têm as mesmas configurações padrão para essas opções.
Se todas as instruções executadas com SQLExecDirect forem codificadas usando essas convenções, o SQL Server poderá reutilizar os planos de execução quando surgir a oportunidade.