Ukládání do mezipaměti plánu dotazů (Entity SQL)

Pokaždé, když se provede pokus o spuštění dotazu, kanál dotazu vyhledá mezipaměť plánu dotazu a zjistí, jestli je přesný dotaz již zkompilovaný a dostupný. Pokud ano, znovu použije plán uložený v mezipaměti místo vytvoření nového plánu. Pokud se v mezipaměti plánu dotazu nenajde shoda, dotaz se zkompiluje a ukládá do mezipaměti. Dotaz je identifikován textem a kolekcí parametrů Entity SQL (názvy a typy). Všechna porovnání textu rozlišují malá a velká písmena.

Konfigurace

Ukládání do mezipaměti plánu dotazů je možné konfigurovat prostřednictvím nástroje EntityCommand.

Chcete-li povolit nebo zakázat ukládání plánu dotazů do mezipaměti prostřednictvím EntityCommand.EnablePlanCaching, nastavte tuto vlastnost na true hodnotu nebo false. Zakázání ukládání plánu do mezipaměti pro jednotlivé dynamické dotazy, které se pravděpodobně nebudou používat vícekrát, než jednou zvýší výkon.

Ukládání plánu dotazů do mezipaměti můžete povolit prostřednictvím EnablePlanCaching.

Dynamické dotazy by se obecně měly vyhnout. Následující příklad dynamického dotazu je zranitelný vůči útokům prostřednictvím injektáže SQL, protože přijímá vstup uživatele přímo bez ověření.

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

Pokud používáte dynamicky generované dotazy, zvažte zakázání ukládání plánů dotazů do mezipaměti, abyste se vyhnuli zbytečné spotřebě paměti pro položky mezipaměti, které se pravděpodobně znovu nepoužívají.

Ukládání plánů dotazů do mezipaměti u statických dotazů a parametrizovaných dotazů může přinést výhody výkonu. Následuje příklad statického dotazu:

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

Aby se dotazy správně shodovaly s mezipamětí plánu dotazů, měly by splňovat následující požadavky:

  • Text dotazu by měl být konstantní vzor, pokud možno konstantní řetězec nebo prostředek.

  • EntityParameter nebo ObjectParameter by měla být použita všude, kde musí být předána hodnota zadaná uživatelem.

Měli byste se vyhnout následujícím vzorům dotazů, které zbytečně spotřebovávají sloty v mezipaměti plánu dotazů:

  • Změní velikost písmen v textu.

  • Změní prázdné znaky.

  • Změní hodnoty literálu.

  • Změní text uvnitř komentářů.

Viz také