聽完 SQL Server 2014關鍵資料庫 小筆記
今天感謝公司讓我去聽百敬老師的SQL Server 2014課程
,課程中記了一些筆記,利用BLOG先記錄下來,內容
不全然跟SQL 2014有關(小弟不懂的都會記一下)
- QUERY避免讓SQL做資料的隱含轉換。例如:TableA中ColB欄位資料型態為Char(1),欄位內容存放0~9
此時如果有個QUERY為
Select * From TableA Where ColB = 1
由於ColB資料型態是Char(1),因此需先轉型成數字後才能比較。如果有針對ColB建立索引,則該索引
無法使用(索引是根據ColB資料型態建立),因此SQL會使用Table Scan來掃描所有資料並轉型來比較。
建議可改寫成
Select * From TableA Where ColB = Convert(char(1),1)
這樣一來針對ColB建立索引就可以使用。至於各種資料型別在比較時的優先順序請參考下面網址
http://msdn.microsoft.com/zh-tw/library/ms190309(v=sql.105).aspx
- SQL2014的原生編譯預存程序(Native-Complied Stored Procedure)運作方式是,SQL將NCSP中TSQL轉成C語言的
CODE後再編譯成dll檔然後放到SQL Server中執行。目前很多的TSQL語法NCSP是不支援,所以舊有的SP
未必可以完全轉換成NCSP,官方建議在傳統的SP中呼叫NCSP來增刪修In Memory Table。
- 大Table請做Page壓縮。
- 重複性高的資料,壓縮率就會高。加密過的資料由於相異性太高了,所以壓縮率會不高。
- Bulk Insert到有建立Columnstore Index的資料表時,建議將TABLE切成多個Files。因為當資料寫入資料表時,由於
Columnstore Index會壓縮資料,所以相對耗用CPU資源。因此建議多Files,讓多CPU平行處理。
- Native-Complied Stored Procedure只能存取In Memory Table,但傳統Stored Procedure則可以存取一般或In Memory兩種型態的Table。
- SQL2014中的資料表變數可以建立索引,之前SQL版本資料表變數只能有PK而已。
- In Memory的Table不支援Alter及Rename,因此當您的memory中的資料表要加欄位時該怎麼做呢?
首先建立一個新資料結構的In Memory Table,然後將舊Table資料寫入新表中。再來刪除掉舊資料表,由於不支援
Rename。所以我們得用舊資料表名稱搭配新資料結構再建立一張表,然後再作一次將[新名稱新結構]資料表的資料
寫入[舊名稱新結構]資料表中。
- SQL2014支援Backup資料庫時加密。
- DB規劃,Raid1磁碟放LDF檔案,Raid5磁碟放MDF及NDF。而可以將TempDB放在SSD中(SSD死了,由於是TmpDB所以
不會有資料遺失問題)。
- 7200轉的硬碟IOPS約200左右,而SSD可以到數千。
- SQL2014資源集區新增支援IO(原來為CPU及Memory),注意:一但IO規則建立了,只要符合規則的連線進來就會套用該
IO限制的規則,就算當時SQL的IO根本不忙。而原來CPU跟Memory是要當資源產生競爭時才會開始套用規則去限制
Connection可使用的資源。
- AlwaysOn建議不要使用主要副本(同步模式)來當查詢的資料庫,應建立第二或第三個副本(非同步模式)來提供查詢。
因為當副本在被查詢時,SQL會在TempDB產生一個Snapshot來提供該Connection查詢使用。因此如果Connection量很大
,SQL的壓力是非常大。如果這一個副本是主要副本(同步模式)的話,將會拖累Primary DB,因為Primary DB要不斷等
待主要副本。
- SQL2014支援Partition Table針對Partition來Rebuild Index。
- SQL2014中AlwaysOn副本如跟Primary DB斷線,該副本仍然可以提供查詢。SQL2012時一旦斷線而該副本蒐集票數
時,一旦發現自己只有一票,就會自殺無法提供查詢。
- Rebuild Index時,如資料表過大,注意LDF檔成長狀況。
我是ROCK
rockchang@mails.fju.edu.tw