日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SQLSERVER 臨時表和表變量的區別匯總

瀏覽:303日期:2023-03-06 14:25:45
目錄
  • 一:背景
    • 1. 講故事
  • 二:到底有什么區別
    • 1. 前置思考
    • 2. 如何驗證都存儲在 tempdb 中 ?
    • 3. 不同點在哪里
  • 三:總結

    一:背景

    1. 講故事

    今天和大家聊一套面試中經常被問到的高頻題,對,就是 臨時表表變量 這倆玩意,如果有朋友在面試中回答的不好,可以嘗試看下這篇能不能幫你成功邁過。

    二:到底有什么區別

    1. 前置思考

    不管是 臨時表 還是 表變量 都帶了 這個詞,既然提到了 ,按推理自然會落到某一個 數據庫 中,如果真在一個 數據庫 中,那自然就有它的存儲文件 .mdf 和 .ldf,那是不是如我推理的那樣呢? 查閱 MSDN 的官方文檔可以發現,臨時表表變量 確實都會使用 tempdb 這個臨時存儲數據庫,而且 tempdb 也有自己的 mdf,ndf,ldf 文件,截圖如下:

    有了這個大思想之后,接下來就可以進行驗證了。

    2. 如何驗證都存儲在 tempdb 中 ?

    要想驗證其實很簡單,sqlserver 提供了多種方式觀察。

    • 查詢的過程中觀察 tempdb 下是否存在 xxx 表。
    • 使用動態管理視圖 sys.dm_db_session_space_usage 查詢當前sql占用tempdb下的數據頁個數。

    為了讓測試效果明顯,我分別插入 10w 條記錄觀察 數據頁 占用情況。

    1.臨時表插入 10w 條記錄

    CREATE TABLE #temp(    id INT,	content CHAR(4000) DEFAULT "aaaaaaaaaa");GOINSERT INTO #temp(id)SELECT TOP 100000       ROW_NUMBER() OVER (ORDER BY o1.object_id) AS idFROM sys.objects AS o1,sys.objects AS o2;GOSELECT * FROM sys.dm_db_session_space_usageWHERE session_id=@@SPID;

    從圖中的 user_objects_alloc_page_count=50456 看,當前的 insert 操作占用了 50456 個數據頁。

    接下來展開 tempdb 數據庫以及觀察到的 mdf 文件大小,都驗證了存儲到 tempdb 這個結論。

    2.表變量插入 10w 條記錄

    因為表變量的特殊性,這里我故意暫停 1min 讓查詢遲遲得不到結束,在這期間方便展開 tempdb,重啟 sqlserver 恢復初始狀態后,執行如下 sql:

    DECLARE @temp TABLE(    id INT,	content CHAR(4000) DEFAULT "aaaaaaaaaa");INSERT INTO @temp(id)SELECT TOP 100000       ROW_NUMBER() OVER (ORDER BY o1.object_id) AS idFROM sys.objects AS o1,sys.objects AS o2;SELECT * FROM sys.dm_db_session_space_usageWHERE session_id=@@SPID;  WAITFOR DELAY "00:01:00"

    從圖中可以看到 表變量 也會占用 5w+ 的數據頁并且數據文件會膨脹。

    3. 不同點在哪里

    對底層存儲有了了解之后,接下來按照重要度從高到低來了解一下區別吧。

    1.臨時表有統計信息,而表變量沒有

    所謂的 統計信息,就是對表數據繪制一個 直方圖 來掌握數據的分布情況,sqlserver 在擇取較優的執行計劃時會嚴重依賴于這個 直方圖,由于展開不了 Statistics 列,這里就從執行計劃上觀察,如下圖所示:

    • 臨時表下的執行計劃

    選中 SELECT * FROM #temp WHERE id > 10 AND id<20; 之后點擊 SSMS 的評估執行計劃按鈕來觀察下評估執行計劃,可以清晰的看到 sqlserver 知道表中有多少條記錄,截圖如下:

    • 表變量下的執行計劃

    由于表變量的批處理性,我們用 SET STATISTICS XML ON 把 xml 查詢出來,然后點擊觀察可視化視圖,參考sql 如下:

    DECLARE @temp TABLE(    id INT,	content CHAR(4000) DEFAULT "aaaaaaaaaa");INSERT INTO @temp(id)SELECT TOP 100000       ROW_NUMBER() OVER (ORDER BY o1.object_id) AS idFROM sys.objects AS o1,sys.objects AS o2;SET STATISTICS XML ONSELECT * FROM @temp WHERE id > 10 AND id<20;SET STATISTICS XML OFF

    從圖中可以清晰的看到,雖然表變量有 10w 條記錄,但由于沒有統計信息,sqlserver 也就無法知道這張表的數據分布,所以就按照默認值 1 條來計算。

    從這里大家也能看得出來,如果 表記錄 的真實條數 和 默認的 1 嚴重偏移的話,會給生成執行計劃 造成重大失誤,這個大家一定要當心了。

    2.其它使用上的區別

    除了上一個本質上的不同,接下來就是一些使用上的不同了,比如:

    • 臨時表是 session 級的,表變量是 批處理 級

    所謂的批處理,就是以 go 為界定,兩者就是作用域上的不同。

    • 臨時表可以后續修改,表變量不能后續修改。

    這里的修改涉及到 字段,索引,整體上來說臨時表在使用上和普通表趨同,表變量不能進行后續修改。

    三:總結

    總的來說,表變量 沒有統計信息,也不可以后續做 DDL 操作,這種情況下 表變量臨時表 更輕量級,不會有如下副作用:

    • DDL 修改導致執行計劃過期重建
    • sqlserver 對 統計信息 的維護壓力

    其實在這種作用域下高頻的創建和刪除表的操作中,表變量會讓系統壓力減輕很多。

    但陽事總會有陰事來均衡它,一旦 表變量 的記錄條數嚴重偏移默認的 1條,會污染sqlserver的執行計劃擇取,可能會讓你的 sql 遭受滅頂之災,所以一定要控制 表變量 的記錄條數,最好在百條內 。

    最后的建議是:如果你是個小白可以無腦使用 臨時表 ,90%的情況下都可以做到通殺,如果你是個高手可以考慮一下 表變量

    到此這篇關于SQLSERVER 臨時表和表變量到底有什么區別的文章就介紹到這了,更多相關SQLSERVER 臨時表和表變量區別內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: MsSQL
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    亚洲精品影视| 国产乱子精品一区二区在线观看| 国产精品网址| 国产亚洲观看| 国产欧美日韩视频在线| 日韩不卡一二三区| 亚洲精一区二区三区| 日韩一区二区三区四区五区| 亚欧成人精品| 国产欧美日韩综合一区在线播放| 国产精品亚洲四区在线观看| 欧美精品二区| jizzjizz中国精品麻豆| 午夜精品成人av| 国产一在线精品一区在线观看| 亲子伦视频一区二区三区| 香蕉久久99| 亚洲午夜一级| 久久xxxx| 亚洲乱码久久| 日韩精彩视频在线观看| 日韩在线观看中文字幕| 91大神在线观看线路一区| 少妇精品久久久一区二区| 欧美亚洲三级| 成人亚洲一区二区| 亚洲高清激情| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲精品福利| 久久亚洲道色| 亚洲成人三区| 最近国产精品视频| 欧美国产免费| 久久精品亚洲欧美日韩精品中文字幕| 99视频精品免费观看| 日韩精品亚洲专区| 国产精品久久国产愉拍| 久久精品123| 亚洲另类黄色| 日本一区二区免费高清| 国产精品日本欧美一区二区三区| 国产一级成人av| 日韩国产欧美一区二区| 男人天堂欧美日韩| 另类欧美日韩国产在线| 美女少妇全过程你懂的久久| 日韩中文一区二区| 国产99在线| 亚洲精品在线国产| 亚洲天堂av影院| 亚洲另类视频| 国产成人免费视频网站视频社区| 夜久久久久久| 免费在线欧美黄色| 欧美日韩国产综合网| 国产日产精品一区二区三区四区的观看方式| 精品久久免费| 免费在线观看不卡| 97精品97| 日本va欧美va瓶| 免费观看不卡av| 久久中文字幕一区二区三区| 亚洲美洲欧洲综合国产一区| 久久只有精品| 亚洲免费成人av在线| 成人精品天堂一区二区三区| 亚洲日本欧美| 99精品国产一区二区三区| 国产乱子精品一区二区在线观看| 婷婷综合网站| 粉嫩av一区二区三区四区五区 | 国产欧美日韩综合一区在线播放| 久久精品播放| 欧美国产精品| 亚洲精品伊人| 亚州av乱码久久精品蜜桃| 精品高清久久| 91精品日本| 亚洲综合日本| 天堂日韩电影| 国产精品亚洲四区在线观看 | 成人日韩在线观看| 国产欧美日本| 亚洲深深色噜噜狠狠爱网站 | 日本不卡一二三区黄网| 欧美日韩国产一区精品一区| 亚洲黄色中文字幕| 国产亚洲一区二区三区不卡| 99香蕉国产精品偷在线观看| 欧美www视频在线观看| 国产美女亚洲精品7777| 影音先锋久久精品| 在线亚洲国产精品网站| 成人久久一区| 国产成人黄色| 毛片不卡一区二区| 国产亚洲高清一区| 日韩av黄色在线| 亚洲人成在线影院| 亚洲一区av| 蜜臀久久99精品久久久久宅男| 国产主播一区| 国产精品麻豆久久| 国产高清视频一区二区| 天堂va在线高清一区| 午夜一级久久| 国产精品社区| 亚洲精品2区| 激情婷婷亚洲| 天堂日韩电影| 亚洲高清二区| 欧美不卡视频| 视频一区中文| 欧美另类综合| 香蕉视频成人在线观看| 91久久中文| 欧美精品九九| 亚洲午夜黄色| 99久久www免费| 欧美国产91| 在线亚洲观看| 蜜臀av国产精品久久久久| 免费在线观看精品| 视频国产精品| 青草国产精品久久久久久| 欧美日韩18| 国产欧美91| 国产精品黄网站| 美女视频免费精品| 精品国产午夜肉伦伦影院| 国产在线观看www| 亚洲va中文在线播放免费| av中文资源在线资源免费观看| 黄毛片在线观看| 久久理论电影| 日韩午夜高潮| 综合一区二区三区| 国产欧美激情| 高清久久精品| 激情综合激情| 亚洲区欧美区| 国产精品xxx| 国产伦久视频在线观看| 欧美中文一区二区| 免费不卡在线视频| 欧美亚洲三级| 97视频热人人精品免费| 日韩欧美午夜| 亚洲欧洲一区| 日本va欧美va瓶| 国产精品99一区二区三| 色偷偷色偷偷色偷偷在线视频| 成人日韩精品| 免费av一区| 亚洲精品在线a| 国产精品久久| 精品免费av在线| 最新国产拍偷乱拍精品| 日本欧美一区二区在线观看| 成人在线视频中文字幕| 欧美久久精品一级c片| 蜜桃视频在线观看一区| 日韩不卡一区二区| 中文在线免费视频| 免费成人性网站| 麻豆成人综合网| 一本一道久久a久久精品蜜桃| 日韩三级视频| 亚洲www啪成人一区二区| 免费美女久久99| 麻豆国产欧美一区二区三区| 久久视频一区| 欧美日本久久| 欧美日韩在线观看视频小说| 亚洲日韩中文字幕一区| 高清精品久久| 深夜日韩欧美| 精品黄色一级片| 樱桃成人精品视频在线播放| 欧美午夜网站| 99视频精品全国免费| 日韩国产91| 久久国产亚洲| 国产精品一区二区99| 激情综合网站| 久久91视频| 亚洲欧美网站在线观看| 中文字幕在线视频网站| 日韩精品一区二区三区中文在线| av在线日韩| 国产精品久久久亚洲一区| 黄色亚洲免费| 久久亚洲精品中文字幕| 丝袜a∨在线一区二区三区不卡| 久久精品国产久精国产爱| 亚洲在线久久| 久久精品国产68国产精品亚洲| 国产精品伊人| 日韩影院在线观看| 成人羞羞在线观看网站|