Direkt Utförande

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Direkt exekvering är det mest grundläggande sättet att exekvera ett sats. En applikation bygger en teckensträng som innehåller ett Transact-SQL-uttryck och skickar in det för exekvering med SQLExecDirect-funktionen . När satsen når servern kompilerar SQL Server den till en exekveringsplan och kör sedan omedelbart exekveringsplanen.

Direkt exekvering används ofta av applikationer som bygger och exekverar satser vid körning och är den mest effektiva metoden för satser som ska köras en enda gång. Nackdelen med många databaser är att SQL-satsen måste parsas och kompileras varje gång den körs, vilket ökar överhuvudet om satsen körs flera gånger.

SQL Server förbättrar avsevärt prestandan vid direkt exekvering av vanligt utförda satser i fleranvändarmiljöer och användning av SQLExecDirect med parametermarkörer för vanligt utförda SQL-satser kan närma sig effektiviteten av förberedd exekvering.

När den är ansluten till en instans av SQL Server använder den SQL Server Native Client ODBC-drivrutinen sp_executesql för att överföra SQL-satsen eller batchen som specificerats på SQLExecDirect. SQL Server har logik för att snabbt avgöra om en SQL-sats eller batch som körs med sp_executesql matchar satsen eller batchen som genererade en exekveringsplan som redan finns i minnet. Om en matchning uppnås återanvänder SQL Server helt enkelt den befintliga planen istället för att sammanställa en ny plan. Detta innebär att ofta utförda SQL-satser som körs med SQLExecDirect i ett system med många användare kommer att dra nytta av många av de plan-återanvändningsfördelar som endast fanns tillgängliga för lagrade procedurer i tidigare versioner av SQL Server.

Denna fördel med att återanvända exekveringsplaner fungerar bara när flera användare kör samma SQL-sats eller batch. Följ dessa kodningskonventioner för att öka sannolikheten att SQL-uttalanden som körs av olika klienter är tillräckligt lika för att kunna återanvända exekveringsplaner:

  • Inkludera inte datakonstanter i SQL-satserna; använd istället parametermarkörer bundna till programvariabler. För mer information, se Användning av satsparametrar.

  • Använd fullt kvalificerade objektnamn. Exekveringsplaner återanvänds inte om objektnamn inte är kvalificerade.

  • Ha applikationsanslutningar så många som möjligt att använda en gemensam uppsättning anslutnings- och satsalternativ. Exekveringsplaner som genereras för en anslutning med en uppsättning alternativ (såsom ANSI_NULLS) återanvänds inte för en anslutning med en annan uppsättning alternativ. SQL Server Native Client ODBC-drivrutinen och SQL Server Native Client OLE DB-leverantören har båda samma standardinställningar för dessa alternativ.

Om alla satser som körs med SQLExecDirect är kodade enligt dessa konventioner kan SQL Server återanvända exekveringsplaner när tillfälle ges.

Se även

Exekverande satser (ODBC)