1. 程式人生 > 實用技巧 >Linux網路程式設計UDP

Linux網路程式設計UDP

SELECT *  FROM sys.servers

上面這個比較有用哦

 

參考:https://www.cnblogs.com/wanshutao/p/3865607.html

 

https://www.cnblogs.com/ljhdo/p/5171006.html 這個是資料庫知識部落格

 https://www.cnblogs.com/zerocc/archive/2012/12/11/2812519.html

 

#   本地區域性臨時表:只有建立本地臨時表連線的連線使用者才能看到,若臨時連線斷開即刪除;

##  全域性臨時表:當全域性臨時表存在時,所有建立連線的使用者均可見,若在建立全域性臨時表的連線斷開前未顯示的刪除全域性臨時表,則需等其所有任務停止引用,才能刪除;

------------------------------------------------------------------------------

 @  區域性變數:需使用Declare宣告,以@開頭定義變數名,指明變數的資料型別(注:區域性變數資料型別不能為text、ntext、image);

@@  全域性變數:是系統預定義的,可返回一些系統資訊;

參考:https://www.cnblogs.com/yangjuanjuan/p/11840231.html

https://www.cnblogs.com/kissdodog/archive/2013/07/03/3169470.html

 

 參考:https://bbs.csdn.net/topics/310235360

 

1 . 為什麼要使用表變數

 

表變數是從2000開始引入的,微軟認為與本地臨時表相比,表變數具有如下優點:

  a.與其他變數的定義一樣,表變數具有良好的定義範圍,並會被自動清除;
  b.在儲存過程中使用表變數會減少儲存過程重新編譯的發生;
  c.表變數需要更少的鎖請求和日誌資源;
  d.可以在表變數上使用UDF,UDDT,XML。

2 .表變數的限制

與臨時表相比,表變數存在著如下缺點:
  a.在表變數上沒有統計資訊,查詢優化器根據固定的預估值來選擇執行計劃,在資料很多的情況下,會導致查詢優化器選擇很差的執行計劃;
  b.不能直接在表變數上建立索引,但可以通過建立約束(主鍵、唯一)來建立索引;

  c.在DECLARE後,不能再對錶變數進行更改;
  d.不能對錶變數執行INSERT EXEC , SELECT INTO語句(只針對05前的版本);
  e.不能通過EXEC或sp_executesql來執行牽涉到表變數的動態SQL語句,但如果表變數是在動態SQL語句內定義的,則可以。

3 .那什麼時候可以使用表變數

要使用表變數應該根據如下規則來判斷:
  a.表的行數;
  b.使用表變數能夠減少的重新編譯次數;
  c.查詢的型別和對索引或者統計資訊的依賴程度;
  d.需要生用UDF,UDDT,XML的時候。
其實也就說,得從實際出發,根據具體的查詢,作出具體的選擇。但是,其中很關鍵的一點,如果表的行數非常多,使用表變數其實是更費資源的。有人提出了這樣的建議:對於行數較少的情況下(小於1000行)可以使用表變數;如果行數很多(有幾萬行),則使用臨時表。

因此,在實際的開發中,應通過分別使用臨時表或表變數進行對比後,才作出決定。


下面是一個例子,插入臨時表和表變數的資料有20多萬行,可以看到,使用臨時表的時間是使用表變數所花時間的1 / 5 。

表 ' SalesOrderHeader ' 。掃描計數 3 ,邏輯讀取 130 次,物理讀取 9 次,預讀 43 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
表 ' #SalesOrderDetail___________________________________________________________________________________________________00000000001F ' 。掃描計數 3 ,邏輯讀取 12331 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
表 ' Worktable ' 。掃描計數 0 ,邏輯讀取 0 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

SQL Server 執行時間:
   CPU 時間 = 2281 毫秒,佔用時間 = 19726 毫秒。
select with temporary table : 20140 ms

******************************************************************************** 

表 ' SalesOrderHeader ' 。掃描計數 0 ,邏輯讀取 764850 次,物理讀取 17 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
表 ' #4E88ABD4 ' 。掃描計數 1 ,邏輯讀取 12331 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

SQL Server 執行時間:
   CPU 時間 = 4375 毫秒,佔用時間 = 107160 毫秒。
select with table variable: 107160 ms

4 .使用表變數的誤區

對於表變數,很多人認為,表變數和其他變數一樣,只存在記憶體中,其實這是不正確的,表變數也存在tempdb中。可以通過下面例子進行對比。

CREATE TABLE #TempTable (TT_Col1 INT )

DECLARE @TableVariable TABLE (TV_Col1 INT )

SELECT TOP 2 * 

FROM tempdb.sys.objects

ORDER BY create_date DESC 


name
-- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
#03317E3D
#TempTable__________________________________________________________________________________________________________000000000003


#03317E3D就是剛建立的表變數;

5 .其他

  表變數不受rollback影響,某些情況下會破壞資料的完整性。

CREATE TABLE #TempTable (TT_Col1 INT )
DECLARE @TableVariable TABLE (TV_Col1 INT )
INSERT #TempTable VALUES ( 1 )
INSERT @TableVariable VALUES ( 1 )
BEGIN TRANSACTION 
     INSERT #TempTable VALUES ( 2 )
      INSERT @TableVariable VALUES ( 2 )
ROLLBACK 
SELECT * FROM #TempTable

/* 
TT_Col1
-------
1
*/ 

SELECT * FROM @TableVariable 
-- 返回了兩條記錄 
/* 
TV_Col1
-------
1
2
*/ 

https://www.cnblogs.com/luolongda/archive/2010/12/22/1913405.html

 

 

參考:https://www.cnblogs.com/chengxingliang/p/3307458.html