Execução direta
A execução direta é o modo mais básico de executar uma instrução. Um aplicativo compila 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 alcança o servidor, o SQL Server a compila em um plano de execução e executa esse plano imediatamente.
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 aprimora significativamente o desempenho da execução direta de instruções executadas comumente em ambientes de vários usuários, e o uso de SQLExecDirect com marcadores de parâmetro para instruções SQL usadas normalmente pode abordar a 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 em SQLExecDirect. O SQL Server tem lógica para determinar rapidamente se uma instrução SQL ou um lote executados com sp_executesql correspondem à instrução ou ao lote que geraram um plano de execução que já existe na memória. Se houver correspondência, o SQL Server simplesmente reutilizará o plano existente, em vez de compilar um novo plano. Isso significa que instruções SQL comumente executadas com SQLExecDirect em um sistema com muitos usuários se beneficiarão de muitas vantagens da reutilização do plano que são disponíveis somente para procedimentos armazenados de 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 planos de execução quando a oportunidade ocorrer.