Megosztás:


Lekérdezésterv gyorsítótárazása (Entity SQL)

Amikor megkísérli végrehajtani a lekérdezést, a lekérdezési folyamat megkeresi a lekérdezésterv gyorsítótárát, hogy lássa, a pontos lekérdezés már lefordítva és elérhető-e. Ha igen, a gyorsítótárazott tervet használja újra, nem pedig egy újat. Ha nem található egyezés a lekérdezésterv gyorsítótárában, a rendszer lefordítja és gyorsítótárazza a lekérdezést. A lekérdezést az Entity SQL-szöveg- és paramétergyűjtemény (nevek és típusok) azonosítja. Minden szöveg-összehasonlítás megkülönbözteti a kis- és nagybetűket.

Konfiguráció

A lekérdezésterv gyorsítótárazása konfigurálható a EntityCommand.

A lekérdezésterv gyorsítótárazásának engedélyezéséhez vagy letiltásához EntityCommand.EnablePlanCachingállítsa ezt a tulajdonságot a következőre true : vagy false. A terv gyorsítótárazásának letiltása az egyes dinamikus lekérdezések esetében, amelyek nem valószínű, hogy többet fognak használni, majd egyszer javítják a teljesítményt.

Engedélyezheti a lekérdezésterv gyorsítótárazását a EnablePlanCaching.

A dinamikus lekérdezéseket általában kerülni kell. Az alábbi dinamikus lekérdezési példa sebezhető az SQL-injektálási támadásokkal szemben, mivel közvetlenül, ellenőrzés nélkül veszi igénybe a felhasználói bemenetet.

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;

Ha dinamikusan generált lekérdezéseket használ, fontolja meg a lekérdezésterv gyorsítótárazásának letiltását, hogy elkerülje a szükségtelen memóriahasználatot az olyan gyorsítótár-bejegyzések esetében, amelyek nem valószínű, hogy újra felhasználhatók.

A statikus lekérdezéseken és a paraméteres lekérdezéseken a lekérdezésterv gyorsítótárazása teljesítménybeli előnyöket biztosíthat. A következő példa egy statikus lekérdezésre:

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";

Ahhoz, hogy a lekérdezési terv gyorsítótára megfelelően megfeleltethesse a lekérdezéseket, meg kell felelniük a következő követelményeknek:

  • A lekérdezés szövegének állandó mintának kell lennie, lehetőleg állandó sztringnek vagy erőforrásnak.

  • EntityParameter vagy ObjectParameter ott kell használni, ahol a felhasználó által megadott értéket át kell adni.

Kerülje a következő lekérdezési mintákat, amelyek szükségtelenül használnak tárolóhelyeket a lekérdezésterv gyorsítótárában:

  • Betűs kis- és nagybetűk módosítása a szövegben.

  • Térköz módosítása.

  • A literális értékek módosítása.

  • Megjegyzések szövegének módosítása.

Lásd még