<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          臨時表在SQL優(yōu)化中的作用

          共 1667字,需瀏覽 4分鐘

           ·

          2021-05-05 06:17

          點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設為“置頂或星標”,第一時間送達干貨

          SQL專欄

          SQL基礎(chǔ)知識第二版
          SQL高級知識第二版

          今天我們來講講臨時表的優(yōu)化技巧

          臨時表,顧名思義就只是臨時使用的一張表,一種是本地臨時表,只能在當前查詢頁面使用,新開查詢是不能使用它的,一種是全局臨時表,不管開多少查詢頁面均可使用。


          0、測試環(huán)境

          SQL Server 2017


          1、本地臨時表

          本地臨時表在表名前加#即可,我們先來看看本地臨時表的特性

          我們新建一個查詢頁面,輸入如下代碼:

          SELECT TOP 10 * INTO #temp
          FROM sales.Temp_Salesorder;
          SELECT * FROM #temp;
          結(jié)果如下:

          我們再新開一個頁面,重新輸入如下代碼:

          SELECT * FROM #temp;

          結(jié)果如下:

          證明本地臨時表只能在當前頁面執(zhí)行。



          2、全局臨時表

          全局臨時表在表名前加##即可,打開任何一個查詢頁面都可以使用它。

          重復上面的步驟:

          SELECT TOP 10 * INTO ##temp
          FROM sales.Temp_Salesorder
          SELECT * FROM ##temp;

          結(jié)果和上面一樣:

          我們再新開一個頁面:

          SELECT * FROM ##temp;

          結(jié)果還是一樣。證明全局臨時表所有查詢頁面均可以使用。



          3、臨時表的優(yōu)化方法

          介紹完臨時表,我們來說說如何用它來進行優(yōu)化
          臨時表的優(yōu)化一般使用再子查詢較多的情況下,也稱為嵌套查詢。我們寫如下子查詢:
          SELECT * FROM sales.Temp_Salesorder
          WHERE SalesOrderDetailID IN
          (SELECT SalesOrderDetailID FROM sales.SalesOrderDetail
          WHERE UnitPrice IN
          (SELECT UnitPrice FROM sales.SalesOrderDetail WHERE UnitPrice>0)
          )

          (提示:代碼可以左右滑動)

          這是一個比較簡單的兩層嵌套子查詢,我們看一下執(zhí)行情況:

          可以看到這里的邏輯讀取是比較高的。
          我們用臨時表重新來看下執(zhí)行情況如何,我們將第一二層的查詢結(jié)果插入到#temp中,然后從臨時表中查詢結(jié)果。
          SELECT SalesOrderDetailID INTO #temp FROM sales.SalesOrderDetail
          WHERE UnitPrice IN (SELECT UnitPrice FROM sales.SalesOrderDetail WHERE UnitPrice>0)

          SELECT * FROM sales.Temp_Salesorder
          WHERE SalesOrderDetailID IN
          (SELECT SalesOrderDetailID FROM #temp)
          執(zhí)行情況如下:

          相比上一次的邏輯讀,成倍的減少了邏輯讀取次數(shù)。在對查詢的性能進行調(diào)節(jié)時,如果邏輯讀值下降,就表明查詢使用的服務器資源減少,查詢的性能有所提高。如果邏輯讀值增加,則表示調(diào)節(jié)措施降低了查詢的性能。在其他條件不變的情況下,一個查詢使用的邏輯讀越少,其效率就越高,查詢的速度就越快。

          因此我們可以看出臨時表在比較復雜的嵌套查詢中是可以提高查詢效率的。
          今天的課就講到這里,有不明白的同學可以在下方留言,我會一一回復。

          推薦閱讀



          后臺回復關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺回復關(guān)鍵字:進群,帶你進入高手如云的交流群

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  少妇人妻在线播放 | 色婷婷免费视频在线观看 | 国产欧美一区二区三区四区 | 高清黄a在线观看 | 久久视频免费在线观看 |