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

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

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

瀏覽:301日期: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久久,三上悠亚国产精品一区二区三区
    免费日韩一区二区三区| 免播放器亚洲| 欧美日本二区| 亚洲精品在线二区| 欧美伊人久久| 久久久久伊人| 免费看av不卡| 午夜国产一区二区| 欧美一区=区| 国产精品午夜av| 98精品久久久久久久| 午夜国产一区二区| 日韩激情中文字幕| 精品久久视频| 精品日韩毛片| 亚洲精品婷婷| 97精品97| 中文字幕成人| 国产精品欧美日韩一区| 精品成人18| 国产精品人人爽人人做我的可爱| 亚洲图片久久| 成人福利av| 日本亚洲视频| 福利片在线一区二区| 男人操女人的视频在线观看欧美| 欧美在线看片| 欧美精品一卡| 国产成人精品福利| 亚洲人成网77777色在线播放| 日韩成人精品一区| 免费看黄色91| 亚洲人成在线网站| 亚洲精品少妇| 激情欧美亚洲| 国语精品一区| 18国产精品| 亚洲自拍另类| 91精品国产福利在线观看麻豆| 国产视频一区二| 亚洲一区二区免费在线观看| 国产精品成人a在线观看| 欧美一级久久| 亚洲中午字幕| 欧美日韩精品免费观看视频完整| 成人在线免费观看网站| 久久99免费视频| 久久精品99国产精品| 女人天堂亚洲aⅴ在线观看| 91综合网人人| 日韩国产一区| 亚洲不卡系列| 啪啪国产精品| 日韩欧美字幕| 日韩在线视频精品| 欧美aa在线观看| 日韩欧美三级| 久久久影院免费| 欧美日韩在线观看视频小说| 日韩精品1区| 神马午夜久久| 亚洲欧洲一区二区天堂久久| 久久蜜桃精品| 亚洲播播91| 日韩在线观看不卡| 韩日一区二区三区| 美女国产精品| 日韩精品社区| 麻豆免费精品视频| 一区二区三区四区日本视频| 亚洲国内欧美| 日韩精品视频中文字幕| 久久的色偷偷| 欧洲亚洲一区二区三区| 久久成人一区| 麻豆精品久久| 激情综合自拍| 日本特黄久久久高潮| 国产精品毛片aⅴ一区二区三区| 免费在线亚洲欧美| 国产91精品对白在线播放| 99成人在线| 国产精品天天看天天狠| www在线观看黄色| 久久国产精品久久久久久电车 | 久久久久99| 视频在线在亚洲| 欧美国产免费| 久久久久国产精品一区二区| 欧美日韩精品一区二区三区在线观看| 欧美中文高清| 久久青草久久| 国产精品夜夜夜| 亚洲欧美久久| 欧美aa在线观看| 国产精品美女久久久| 久久伊人国产| 99在线精品免费视频九九视 | 国产精品99精品一区二区三区∴| 婷婷六月综合| 99热国内精品| 国产激情精品一区二区三区| 亚洲www啪成人一区二区| 欧美日本久久| 亚洲深夜福利在线观看| 日韩在线综合| 国产一区二区三区四区五区 | 蘑菇福利视频一区播放| 日韩欧美精品一区| 热久久久久久| 香蕉久久一区| 91久久国产| 成人羞羞视频在线看网址| 久久精品一本| 亚洲+小说+欧美+激情+另类| 亚洲国产不卡| 亚洲欧洲另类| 狠狠爱www人成狠狠爱综合网| 国产91在线播放精品| 欧美日一区二区三区在线观看国产免| 国产亚洲综合精品| 欧美国产极品| 亚洲一区二区av| 国产一区欧美| 日韩福利一区| 涩涩av在线| 色偷偷色偷偷色偷偷在线视频| 国产精品xxx| 国产福利一区二区精品秒拍 | 欧美亚洲三级| 久久精品99国产国产精| 国产日韩亚洲欧美精品| 日韩av资源网| 国产日本精品| 欧美激情五月| 日韩av片子| 激情欧美国产欧美| 日韩午夜一区| 亚洲精品高潮| 国产精品**亚洲精品| 美女性感视频久久| 精品视频一区二区三区四区五区| 久久久久久夜| 亚洲一区av| 国产一区二区三区日韩精品| 欧美日韩视频免费观看| 美女毛片一区二区三区四区| 日本中文字幕不卡| 综合日韩av| 综合亚洲色图| 国产精品蜜芽在线观看| 视频一区二区三区中文字幕| 六月丁香综合在线视频| 亚洲性色视频| 欧美黄色精品| 亚洲欧洲专区| 久久久久久色| 婷婷国产精品| 牛牛精品成人免费视频| 日韩一区精品视频| 91精品在线观看国产| 国产精品网在线观看| 亚洲精品va| 日韩成人亚洲| 国产一区三区在线播放| 婷婷精品在线| 日韩另类视频| 麻豆久久久久久| 欧美一级一区| 亚洲精品韩国| 午夜在线视频一区二区区别 | 日韩高清在线观看一区二区| 亚洲福利久久| 国产精品字幕| 国产一区国产二区国产三区| 欧美伊人久久| 日韩欧美另类中文字幕| 美国三级日本三级久久99 | 日韩欧美自拍| 你懂的亚洲视频| 91成人在线精品视频| 亚洲成人精选| 久久久水蜜桃av免费网站| 国产精品毛片久久| 久久精品伊人| 国内精品伊人| 国产欧美日韩在线一区二区| 日韩三级一区| 欧美一区91| 精品免费av| 国产成人久久精品麻豆二区 | 国产欧美一区二区三区国产幕精品| 亚洲影视一区| 日本色综合中文字幕| 久久国内精品| 日本免费在线视频不卡一不卡二| 日韩福利在线观看| 美女久久99| 三上悠亚国产精品一区二区三区| 91精品久久久久久久久久不卡|