Frågeplan Cachelagring (entitets-SQL)
När ett försök görs att köra en fråga letar frågepipelinen upp frågeplanens cache för att se om den exakta frågan redan är kompilerad och tillgänglig. I så fall återanvänder den cachelagrade planen i stället för att skapa en ny. Om en matchning inte hittas i frågeplanens cache, kompileras och cachelagras frågan. En fråga identifieras av dess sql-text- och parametersamling för entitet (namn och typer). Alla textjämförelser är skiftlägeskänsliga.
Konfiguration
Cachelagring av frågeplan kan konfigureras via EntityCommand.
Om du vill aktivera eller inaktivera cachelagring av frågeplan via EntityCommand.EnablePlanCachinganger du den här egenskapen till true
eller false
. Om du inaktiverar plancachelagring för enskilda dynamiska frågor som sannolikt inte kommer att användas mer än en gång förbättras prestandan.
Du kan aktivera cachelagring av frågeplan via EnablePlanCaching.
Rekommenderad metod
Dynamiska frågor bör undvikas i allmänhet. Följande dynamiska frågeexempel är sårbart för SQL-inmatningsattacker, eftersom det tar användarindata direkt utan validering.
var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;
Om du använder dynamiskt genererade frågor bör du överväga att inaktivera cachelagring av frågeplan för att undvika onödig minnesförbrukning för cacheposter som sannolikt inte kommer att återanvändas.
Cachelagring av frågeplan på statiska frågor och parametriserade frågor kan ge prestandafördelar. Följande är ett exempel på en statisk fråga:
var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";
För att frågor ska matchas korrekt av frågeplanens cacheminne bör de uppfylla följande krav:
Frågetext ska vara ett konstant mönster, helst en konstant sträng eller en resurs.
EntityParameter eller ObjectParameter ska användas varhelst ett användarangivet värde måste skickas.
Du bör undvika följande frågemönster, som i onödan förbrukar platser i frågeplanens cacheminne:
Ändringar i bokstavsfallet i texten.
Ändringar i tomt utrymme.
Ändringar i literalvärden.
Ändringar i text inuti kommentarer.