英文字母、下劃線和數字,首位字符必須是英文字母
禁止使用空格、中橫線、保留字html
每一個單詞的首字母大寫sql
相關對象的命名或須要特殊標記時
通常與下劃線同時使用數據庫
格式:<Action><Name>
Action:Get,Delete,Update,Select等動詞緩存
格式:IX_<TableName>_<Columns>服務器
主鍵:PK_<TableName>
外鍵:FK_<TableName1>_<TableName2>函數
格式:DF_<TableName>_<ColumnName>oop
腳本有必要的縮進和換行,使用統一的縮進符性能
關鍵字、系統變量名、系統函數名所有大寫優化
對象前加owner(通常是dbo)
若是涉及到跨數據庫,就須要加上Database名稱;已經在數據庫中,不用加庫名
如:dbo.TableName、DatabaseName.dbo.TableName
不容許出現DatabaseName..TableNameui
單行註釋,用—sqlcode
多行註釋,用/sqlcode/
存儲過程、視圖、用戶定義函數必須有合理的註釋,至少包括:建立人、建立日期、修改人、修改日期、功能描述、參數說明
字段名前須要加上表名(別名)
SELECT語句中不容許出現*
INSERT語句中,必須指定插入列的列表
SELECT中涉及的表和視圖,在非事務和特別的完整性要求的上下文中,使用WITH(NOLOCK),而非NOLOCK
跨服務器查詢語句時,能夠用WITH(NOLOCK)
在UPDATE和DELETE的WHERE子句中,儘可能用主鍵
JOIN時注意篩選條件與鏈接條件的位置
能使用INNER JOIN實現的處理,不要使用外鏈接
建議使用SELECT語句,或While Loop語句實現相同功能
注意子查詢、臨時表和表變量的使用
只返回出必須的列,不要包含與處理需求無關的列(*)
變量
變量賦值:請修改成SELECT TOP 1…
動態T-SQL處理語句中,若是涉及到變量,儘可能使用sp_executesql,經過參數傳遞進行處理
存儲過程的起始部分定義Declare語句,這會使查詢優化器,Reuse查詢計劃
ntext,text,image數據類型再也不容許使用,請用nvarchar(max),varchar(max),varbinary(max),xml
注意隱式轉換,使用顯示的數據類型轉換(CAST或CONVERT),特別是在WHERE語句中
變量、參數的類型要與邏輯運算的字段類型一致
禁止使用PRINT語句
使用SET NOCOUNT ON/OFF(關閉數據庫提示)語句
SELECT RANK() OVER ( ORDER BY PKID DESC ) '排序' , PKID , EmployeeNo , EmployeeName , EmployeeType FROM Employee
WITH TB
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY PKID DESC ) AS 'RowNumber' , PKID , EmployeeNo , EmployeeName , EmployeeType FROM Employee WITH(NOLOCK) ) SELECT PKID , EmployeeNo , EmployeeName , EmployeeType FROM TB WHERE TB.RowNumber BETWEEN 0 AND 5;
參考:http://jingyan.baidu.com/article/597035521ff2ec8fc107404b.html
返回指定數目的行
SELECT TOP (10) EmployeeNo , EmployeeName , EmployeeType FROM Employee ORDER BY PKID DESC WITH(NOLOCK)
返回指定百分比的行
SELECT TOP (16) PERCENT EmployeeNo , EmployeeName , EmployeeType FROM Employee WITH(NOLOCK)
WITH TIES參數
--結果可能多餘16個 SELECT TOP (16) WITH TIES EmployeeNo , EmployeeName , EmployeeType FROM Employee WITH(NOLOCK) --必須包含ORDER BY語句 ORDER BY PKID --結果可能多餘16% SELECT TOP (16) PERCENT WITH TIES EmployeeNo , EmployeeName , EmployeeType FROM Employee WITH(NOLOCK) --必須包含ORDER BY語句 ORDER BY PKID
NOT IN
--獲取第21~40個 SELECT TOP 20 PKID FROM Employee WHERE ( PKID NOT IN ( SELECT TOP 20 PKID FROM Employee ORDER BY PKID ) ) ORDER BY PKID
PKID大於前X個的最大值
--獲取第21~40個 SELECT TOP 20 PKID FROM Employee WHERE ( PKID > ( SELECT MAX(PKID) FROM ( SELECT TOP 20 PKID FROM Employee ORDER BY PKID ) AS T ) ) ORDER BY PKID;
跳過指定的行數
--跳過前10個,取後面的所有數據 SELECT PKID FROM Employee ORDER BY PKID OFFSET 10 ROWS
跳過指定的行數,再返回指定的行數
SELECT PKID FROM Employee ORDER BY PKID OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY
注意
OFFSET子句必須與ORDER BY子句組合使用,且不能夠與TOP同時使用
ROW和ROWS能夠互換使用
FIRST和NEXT能夠互換使用
--將Name爲'費用1'和'費用2'的行轉列,統計Money總和 SELECT * FROM ( SELECT PKID,ChargeDate,ChargeID,Money,Name FROM Charge WHERE IsDelete != 1 ) sc PIVOT ( SUM(Money) FOR Name IN ( [費用1], [費用2] ) ) AS PI;
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
功能:將數據以XML格式進行展現
應用場景:合併多行數據顯示爲一行數據
基本語法:
FOR XML PATH
FOR XML PATH(‘My’) --修改每條記錄的最大節點名稱(行節點)
FOR XML PATH(‘’)
能夠與STUFF函數配合使用
參考資料:http://www.cnblogs.com/wangjingblogs/archive/2012/05/16/2504325.html
語法:IIf(Logical EXPression, Numeric Expression1, Numeric Expression2)
若是 Logical Expression 取值爲 TRUE,則此函數返回 Numeric Expression1,不然,返回 Numeric Expression2
某些場合能夠用來替換CASE WHEN語句
Eg.
--統計費用表中,單筆費用超過2000元的單數 SELECT SUM(IIF(Money>2000, 1,0)) as number from Charge ---等同於 SELECT SUM(1) AS number FROM Charge WHERE Money>2000
功能:從參數列表中選擇和返回一個值
語法:CHOOSE(index,val1,val2…)
某些場合能夠用來替換CASE WHEN語句
Eg.
SELECT CHOOSE(2,PKID,ShopID,Name,Money) FROM Charge WHERE PKID=257
--從緩衝池中刪除全部緩衝區 DBCC DROPCLEANBUFFERS
--刪除計劃緩存中的全部(特定)計劃 DBCC FREEPROCCACHE
--顯示有關由Transact-SQL 語句生成的磁盤活動量的信息 SET STATISTICS IO ON SET STATISTICS IO OFF
先將開關打開,以後執行sql語句,在消息中,就會顯示磁盤活動量
Eg.
表 'Charge'。掃描計數 0,邏輯讀取 3 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
--顯示分析、編譯和執行各語句所需的毫秒數 SET STATISTICS TIME ON SET STATISTICS TIME OFF
先將開關打開,以後執行sql語句,在消息中,就會顯示分析和編譯、執行時間
Eg.
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,佔用時間 = 0 毫秒。
SQL Server 執行時間:
CPU 時間 = 0 毫秒,佔用時間 = 0 毫秒。
定義:由優化器生成、用於肯定如何處理一個給定查詢的「工做計劃」
功能:
查看腳本的執行階段
每一個運行符相關聯的開銷百分比,包括IO、CPU等
索引的使用和缺失狀況
Eg.
選擇要執行的sql語句,右鍵選擇「顯示估計的執行計劃」,執行sql
定義:指定的強制選項或策略,由SQL Server查詢處理器針對SELECT/INSERT/UPDATE/DELETE語句執行。提示將覆蓋查詢優化器可能爲查詢選擇的任何執行計劃。
聯接提示:LOOP/HASH/MERGE/REMOTE
查詢提示:USE PLAN N ‘xml_plan’
表提示:NOLOCK/ROWLOCK/INDEX=(index_value)
優點:索引能夠減小I/O開銷、加快數據處理速度
弊端:增長數據表的存儲空間、延長DML腳本的運行時間
主鍵索引、彙集索引、非彙集索引、惟一索引四者的區別
組合索引的建立原則
查看索引使用狀況
索引碎片分析
WITH(NOLOCK)子查詢、臨時表、表變量的運用參數、變量的數據類型UPDATE/DELETE代碼中的WHERE的條件存儲過程的使用對象(數據庫、表、字段)引用格式