現在將調整Java代碼來准備這個查詢語句。在執行之前,我通過命令DBCC FREEPROCCACHE清除該計劃緩存,接著通過一個准備好的語句重新運行Java class:
圖三
重新審視這個計劃緩存,我們可以看到,該查詢已經成功編譯並且重新用於所有的執行,因此有效地使用和保存服務器內存和限制CPU使用。
圖四
現在,考慮到由於計劃緩存是內存共享池的一部分,那麼消除多余的計劃可以為其他緩存騰出更多可用內存,從而使其他的緩存可以使用這個共享池,比如存儲已經從硬盤中讀取到內存中的數據和索引頁的SQL Server數據緩存。
雖然相對於使用非參數特設的查詢請求來說,准備好的查詢是一種更好的方法,但是比起這兩種方法,我個人更偏向於使用存儲過程。允許直接訪問你的核心數據庫表存在安全風險,通過存儲過程把數據從邏輯中抽取出來可以減少維護,並且當業務需求變化時,它也能夠減少數據模型的變化。無論你選擇哪種數據訪問方法,請記住通過確保你的查詢計劃是可以重復利用的,從而把你的應用程序從潛在的內存和CPU問題中解救出來。