表變量:存儲在內存中,作用域是腳本的執行過程中,腳本執行完畢之后就會釋放內存,適合短時間內存儲數據量小的數據集。
優點:使用靈活,使用完之后立即釋放,不占用物理存儲空間
缺點:只適合較小數據量的暫時存儲,不能建索引,數據量稍大時查詢效率慢,占內存
使用臨時表和表變量的數據量大小沒有具體的臨界值,DBA建議1000條數據,查詢列不要太多的情況下。
臨時表:臨時表是存儲在物理硬盤中的,建表位置在tempdb庫中, 可以長久存儲數據
優點:能夠長久存儲數據,可以建立索引,和普通的物理表一樣,能存儲大量數據
缺點:不方便使用,使用完之后要手動的drop,不然就會一直存在(此次連接關閉后就沒了)
具體使用:
臨時表:
1.SELECT into #filterList from table 。。。。。 2.CREATE table #tegeb ( number int , amount decimal, ststus varchar )
insert into #tegeb SELECT TOP 10 number, amount,atatus FROM business.dbo.order with(NOLOCK)
SELECT * FROM #tegeb //臨時表一直存在,直到鏈接關閉 DROP TABLE dbo.#tegeb //必須手動drop
表變量:
1. DECLARE @temp table ( number int , amount decimal, ststus varchar ) insert into @temp SELECT top 10 number, amount,status FROM business.dbo.order SELECT * FROM @temp //已經不存在了
查看SQL執行效率的語句:
SET STATISTICS PROFILE ON:顯示分析、編譯和執行查詢所需的時間(以毫秒為單位)。 SET STATISTICS IO ON:報告與語句內引用的每個表的掃描數、邏輯讀取數(在高速緩存中訪問的頁數)和物理讀取數(訪問磁盤的次數)有關的信息。 SET STATISTICS TIME ON:顯示每個查詢執行后的結果集,代表查詢執行的配置文件。
使用方法:打開SQL SERVER 查詢分析器,輸入以下語句:
SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON GO /*--SQL腳本開始*/ SELECT [TestCase] FROM [TestCaseSelect] GO /*--SQL腳本結束*/ SET STATISTICS PROFILE OFF SET STATISTICS IO OFF SET STATISTICS TIME OFF SET STATISTICS IO ON --關閉有關由Transact-SQL 語句生成的磁盤活動量的信息 SET STATISTICS IO OFF --顯示[返回有關語句執行情況的詳細信息,並估計語句對資源的需求] SET SHOWPLAN_ALL ON --關閉[返回有關語句執行情況的詳細信息,並估計語句對資源的需求] SET SHOWPLAN_ALL OFF