• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • SQL Server執行SQL語句時內存占用特點[4]

    發表于:2008-07-15來源:作者:點擊數: 標簽:sqlSqlSQLSERVER語句
    在兩個表都有聚集索引情況下,邏輯讀最小,每個表只有2到3次。而且只有實際需要輸出的數據才會被讀入內存頁。兩個表都有非聚集索引情況下,消耗的邏輯讀和內存資源近似。 測試5:執行Merge Join 5.1 執行全表選取或者低選擇性選取 執行 SQL : 以下是引用片段
    在兩個表都有聚集索引情況下,邏輯讀最小,每個表只有2到3次。而且只有實際需要輸出的數據才會被讀入內存頁。兩個表都有非聚集索引情況下,消耗的邏輯讀和內存資源近似。

      測試5:執行Merge Join

      5.1 執行全表選取或者低選擇性選取

      執行SQL:

    以下是引用片段:
     Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo

      如果兩張表都沒有任何索引,則兩張表都要進行全表掃描。所有的數據都要讀入內存頁。

      邏輯讀數近似等于兩張表的數據頁總和。SQL Server處理過程中將使用到臨時表。

      只有一張表有聚集索引的情形類似,SQL Server處理過程中將使用到臨時表。并且讀入所有的數據頁到內存。

      如果兩張表都有聚集索引,盡管兩表的數據都會被讀入內存頁,但邏輯讀數已經大大減少,等于其中一張表總數據內存頁數加上最終輸出的數據頁數。而且SQL Server處理過程中將不需要再使用臨時表。

      5.2 執行高選擇性選取

      對于這樣的高選擇性SQL語句,SQL Server 將提示無法生成執行計劃。

    以下是引用片段:
    Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
      Where A.MobileNo=28913

      但可以執行:

    以下是引用片段:
     Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
      Where A.MobileNo<=28001 (注:最終結果只有2條)

      這樣的屬于低選擇性語句,但最終結果也很少的語句。如前面所述,這種情況下,采.netsted loop聯接效率可能更高。

      4.2 執行高選擇性選取

      執行如下的SQL語句:

    以下是引用片段:
     Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
      Where A.MobileNo=28913

      在兩個表都沒有任何索引情況下,兩張表都將執行全表掃描。要讀入所有的數據頁到內存??傮w邏輯讀取決于兩表的數據頁數。

      在一個表有聚集索引或者非聚集索引情況下,該表將執行Index Seek,另一個表將出現全表掃描。內存數據緩沖區中,將有一張表只讀入最終數據所在的數據頁、一張表讀入全部數據頁。邏輯讀數取決于表在聯接中的秩序、以及無索引表的數據頁數。

      在兩個表都有聚集索引情況下,邏輯讀最小,每個表只有2到3次。而且只有實際需要輸出的數據才會被讀入內存頁。兩個表都有非聚集索引情況下,消耗的邏輯讀和內存資源近似。

      測試5:執行Merge Join

      5.1 執行全表選取或者低選擇性選取

      執行SQL:

    以下是引用片段:
     Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo

      如果兩張表都沒有任何索引,則兩張表都要進行全表掃描。所有的數據都要讀入內存頁。

      邏輯讀數近似等于兩張表的數據頁總和。SQL Server處理過程中將使用到臨時表。

      只有一張表有聚集索引的情形類似,SQL Server處理過程中將使用到臨時表。并且讀入所有的數據頁到內存。

      如果兩張表都有聚集索引,盡管兩表的數據都會被讀入內存頁,但邏輯讀數已經大大減少,等于其中一張表總數據內存頁數加上最終輸出的數據頁數。而且SQL Server處理過程中將不需要再使用臨時表。

      5.2 執行高選擇性選取

      對于這樣的高選擇性SQL語句,SQL Server 將提示無法生成執行計劃。

    以下是引用片段:
    Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
      Where A.MobileNo=28913

      但可以執行:

    以下是引用片段:
     Select * From P_Order A
      Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
      Where A.MobileNo<=28001 (注:最終結果只有2條)

      這樣的屬于低選擇性語句,但最終結果也很少的語句。如前面所述,這種情況下,采用netsted loop聯接效率可能更高。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>