臨時表與表變量都可以起到“臨時”的作用,那么兩者主要的區別是什么呢?
這里不討論創建方式,以及全局臨時表、會話臨時表這些,主要記錄一下個人對兩者的主要區別以及適用情況的看法,有什么不對或補充的地方,歡迎討論。
區別:
1. 表變量存儲在內存中,當創建表變量時,sql server不會產生日志,也不會維護統計信息;表變量的字段不能建立索引;不能有約束和默認值。sql server 認為表變量通常只有很少量的數據。
2. 當創建臨時表時,sql server會產生日志,統計信息;臨時表的字段可以建立索引,所以它可以存儲相對較多的數據;可以有約束和默認值,并且有鎖機制。可以說臨時表與實際的表幾乎是一樣的,只不過它是輕量和臨時的,可以在想要的時候創建和銷毀。
適用情況:
表變量: 如果是很少量數據,那么就用表變量。使用表變量的開銷要小于臨時表。實際項目用到的地方,例如批量刪除,需要傳遞多個id 作為參數,有的人會拼接id字符串,然后在數據庫去解析;我的做法通常是傳遞xml,然后用xml生成表變量,然后鏈接表刪除。
臨時表:有多張表鏈接查詢得到一個小結果集,該結果集需要在本次會話或多個會話里多次使用。
新聞熱點
疑難解答