『壹』 讓大家幫忙詳細解釋一下:constraint [pk_users] primary key clustered
這是在UserID列上創建唯一聚集索引的語句。
ON[PRIMARY]表示在主文件組上創建索引。
[pk_users]是主鍵的名稱。
主鍵顯示創建一個主鍵約束,culstered指數類型表示一個聚集索引,和IGNORE_DUP_KEY=的影響,當向表中插入數據時,如果遇到用戶id的值在表中,insert語句失敗,整個insert語句回滾。
(1)資料庫中clustered擴展閱讀:
注意事項:
SQL語言是一種高級的、非過程性的編程語言,允許用戶處理高級數據結構。它不要求用戶指定數據存儲方法,也不要求用戶知道具體的數據存儲方法。
因此不同底層結構完全不同的資料庫系統可以使用相同的結構化查詢語言作為數據輸入和管理的介面,SQL語言語句可以嵌套,這為它提供了極大的靈活性和強大功能。
結構化查詢語言(SQL)是最重要的關系資料庫操作語言,和它的影響已經超出了資料庫域,並重視和採用其他領域,比如人工智慧領域的數據檢索,和語言嵌入式SQL的第四代軟體開發工具。
『貳』 在SQLServer中使用索引的技巧
在SQL Server中 為了查詢性能的優化 有時我們就需要對數據表通過建立索引的方式 目的主要是根據查詢要求 迅速縮小查詢范圍 避免全表掃描
索引有兩種類型 分別是聚集索引(clustered index 也稱聚類索引 簇集索引)和非聚集索引(nonclustered index 也稱非聚類索引 非簇集索引)
聚集索引在一個表中只能有一個 默認情況下在主鍵建立的時候創建 它是規定數據在表中的物理存儲順序 我們也可以取消主鍵的聚集索引 所以必須考慮資料庫可能用到的查詢類型以及使用的最為頻繁的查詢類型 對其最常用的一個欄位或者多個欄位建立聚集索引或者組合的聚集索引 它就是SQL Server會在物理上按升序(默認)或者降序重排數據列 這樣就可以迅速的找到被查詢的數據
非聚集索主要是數據存儲在一個地方 索引存儲在另一個地方 索引帶有指針指向數據的存儲位置 索引中的項目按索返灶引鍵值的順序存儲 而表中的信息按另一種順序存儲 可以在一個表格中使用高達 個非聚集的索引 在查詢的過程中先對非聚集索引進行搜索 找到數據值在表中的位置 然後從該位置直接檢索數據 這使非聚集索引成為精確匹配查詢的最佳方法 因為索引包含描述查詢所搜索的數據值在表中的精確位置的條目賣哪
所以我們在選擇創建聚集索引的時候要注意以下幾個方面
) 對表建立主鍵時 就會為主鍵自動添加了聚集索引 如自動編號欄位 而我們沒有必要把聚集索引浪費在主鍵上 除非你只按主鍵查詢 所以會把聚集索引設置在按條件查詢頻率最高的那個欄位或者組合的欄位
) 索引的建立要根據實際應用的需求來進行 並非是在任何欄位上建立索引就能提高查詢速度 聚集索引建立遵循下面幾個原則
包含大量非重復值的列
使用下列運算符返回一個范圍值的查詢 BEEEN > >= < 和 <=
被連續訪問的列
返回大型結果集的查詢
經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說 這些是外鍵列 對ORDER BY 或 GROUP BY 子句中指定的列進行索引 可以使 SQL Server 不必對數據進行排序 因為這些行已經排序 這樣可以提高查詢性能
OLTP 類型的應用程序 這些程序要求進行非常快速的單行查找(一般通過主鍵) 應在主鍵上創建聚集索引
舉例來說 銀行交易日誌中對交易日期建立聚合索引 數據物理上按順序存於數據頁上 重復值也排列在一起 因而在范圍查找時 可以先找到這個范圍的起末點 且只在這個范圍內掃描數據頁 避免了大范圍掃描 提高了查詢速度 而如果我們對員工的基本信息表中性別的欄位列上建立聚集索引 就完全沒有必要 因為內容里只涉漏配扮及到 男 與 女 兩個不同值
) 在聚集索引中按常用的組合欄位建立索引 形成復合索引 一般在為表建立多個主鍵的時候就會產生 如果一個表中的數據在查詢時有多個欄位總是同時出現則這些欄位就可以作為復合索引 這樣能形成索引覆蓋 提高where語句的查詢效率
)索引對查詢有一這的優化 但由於改變一個表的內容 將會引起索引的變化 頻繁的對數據操作如insert update delete語句將導致系統花費較大的代價進行索引更新 引起整體性能的下降 一般來講 在對查詢性能的要求高於對數據維護性能要求時 應該盡量使用索引 有時在這種操作資料庫比較頻繁的某些極端情況下 可先刪除索引 再對資料庫表更新大量數據 最後再重建索引 新建立的索引總是比較好用
索引在使用了長久的時候 就會產生很多的碎片 查詢的性能就會受到影響 這時候有兩種方法解決 一是利用DBCC INDEXDEFRAG整理索引碎片 還有就是利用DBCC DBREINDEX重建索引
DBCC INDEXDEFRAG 命令是聯機操作 所以索引只有在該命令正在運行時才可用 而且可以在不丟失已完成工作的情況下中斷該操作 這種方法的缺點是在重新組織數據方面沒有聚集索引的除去/重新創建操作有效
重新創建聚集索引將對數據進行重新組織 其結果是使數據頁填滿 填滿程度可以使用 FILLFACTOR 選項進行配置 這種方法的缺點是索引在除去/重新創建周期內為離線狀態 並且操作屬原子級 如果中斷索引創建 則不會重新創建該索引
我們來看看索引重建使用的方法
語法 DBCC DBREINDEX ( [ TableName [ index_name [ fillfactor ] ] ] )
參數 TableName
是要重建其指定的索引的表名 資料庫 所有者和表名必須符合標識符的規則 有關更多信息 請參見使用標識符 如果提供 database 或 owner 部分 則必須使用單引號 ( )
將整個 database owner table_name 括起來 如果只指定 table_name 則不需要單引號
index_name 是要重建的索引名 索引名必須符合標識符的規則 如果未指定 index_name 或指定為 就要對表的所有索引進行重建
fillfactor 是創建索引時每個索引頁上要用於存儲數據的空間百分比 fillfactor替換起始填充因子以作為索引或任何其它重建的非聚集索引(因為已重建聚集索引)的新默認值 如果 fillfactor 為 DBCC DBREINDEX 在創建索引時將使用指定的起始fillfactor
我們在查詢分析器中輸入如下的命令
DBCC DBREINDEX ( MyTable )
lishixin/Article/program/SQLServer/201311/22210
『叄』 sql索引分為幾類
不同資料庫中提供了不同的索引類型,SQLServer中的索引有兩種:聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)。
索引區別:
聚集索引:
聚集索引基於數據行的鍵值,在表內排序和存儲這些數據行。每個表只能有一個聚集索引,應為數據行本分只能按一個順序存儲。
在聚集索引中,表中各行的物理順序與索引鍵值的邏輯(索引)順序相同。聚集索引通常可加快UPDATE和DELETE操作的速度,因為這兩個操作需要讀取大量的數據。創建或修改聚集索引可能要花很長時間,因為執行這兩個操作時要在磁碟上對表的行進行重組。
非聚集索引:
因為一個表中只能有一個聚集索引,如果需要在表中建立多個索引,則可以創建為非聚集索引。表中的數據並不按照非聚集索引列的順序存儲,但非聚集索引的索引行中保存了非聚集鍵值和行定位器,可以快捷地根據非聚集鍵的值來定位記錄的存儲位置。
延伸閱讀:
無論是聚集索引,還是非聚集索引,都可以是唯一索引(UNIQUE)
。在SQL Server中,當唯一性是數據本身的特點時,可創建唯一索引,但索引列的組合不同於表的主鍵。例如,如果要頻繁查詢表a(該表主鍵為列a_id)的列a_name,而且要保證姓名是唯一的,則在列a_name上創建唯一索引。如果用戶為多個員工輸入了相同的姓名,則資料庫顯示錯誤,並且不能保存該表。