Sql Server-執行計畫

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   使用   ar   strong   sp   

1.每次執行sql語句都會產生執行計畫並緩衝起來,因為產生執行計畫也需要時間開銷,因此重用執行計畫將能提高效能,並節省緩衝區空間。我們可以使用sys.dm_exec_cached_plans、sys.dm_exec_sql_text、sys.dm_exec_query_plan來查詢快取的執行計畫。

以下實驗語句每次執行前需要執行DBCC freeproccache來清空計畫快取

2.查詢執行計畫語句

select     b.[text],    a.usecounts,    a.cacheobjtype,    a.objtype,    c.query_plan,    a.size_in_bytesfrom sys.dm_exec_cached_plans aCROSS APPLY sys.dm_exec_sql_text(a.plan_handle) bCROSS APPLY sys.dm_exec_query_plan(a.plan_handle) c

說明:

  text:代碼sql語句

  usecounts:緩衝使用次數

  objtype:

    Prepared 預定義語句,使用參數化查詢的sql語句

           Adhoc 即席查詢,沒有參數話的查詢

3.測試

    3.1 執行3次下面語句

select * from Person.Address where AddressID = 1

     結果如下,看第2、3條,Adhoc和Prepared分別被執行3次和1次,說明執行計畫被重用了。

     3.2 執行下面3個語句

select * from Person.Address where AddressID = 1goselect * from Person.Address where AddressID = 2goselect * from Person.Address where AddressID = 3go

    結果如下,分別為每個Adhoc查詢產生了一個計畫快取

     3.3 執行下面參數話查詢2次

exec sp_executesql N‘select * from Person.Address where AddressID = @AddressID‘,N‘@AddressID int‘,@AddressID=1

    結果日下,計畫快取被使用了2次

    3.4  執行下面語句

exec sp_executesql N‘select * from Person.Address where AddressID = @AddressID‘,N‘@AddressID int‘,@AddressID=1goexec sp_executesql N‘select * from Person.Address where AddressID = @AddressID‘,N‘@AddressID int‘,@AddressID=2go

    結果如下,當查詢參數值不同時,計劃也被重用了

    3.5 執行下面語句

select * from Person.Address where City = ‘San Francisco‘goselect * from Person.Address where City = ‘Dallas‘go

    結果如下,adhoc計劃重建了。所以在後台代碼裡寫sql語句的時,如果是拼接語句的時候,如果是字串,且長度不一致時,則不會重用執行計畫,原因是對sql語句進行hash計算,根據計算結果去找是否存在執行計畫,所以一個字元差別就會導致計劃不能重用。

    3.6 執行下面語句

exec sp_executesql N‘select * from Person.Address where City = @City‘,N‘@City nvarchar(100)‘,@City=‘San Francisco‘goexec sp_executesql N‘select * from Person.Address where City = @City‘,N‘@City nvarchar(100)‘,@City=‘Dallas‘go

    結果如下,當使用參數話查詢的時候,計劃被重用了。

Sql Server-執行計畫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.