天天看點

SQL Server從入門到精通(六)

哈喽

太長時間沒有更新SQL Server是不是大家把以前學的知識都給忘記了,忘記了就趕緊回顧學習

SQL Server從入門到精通(六)

往期精選

SQL Server從入門到精通(一)

SQL Server從入門到精通(二)

SQL Server從入門到精通(二)精講

SQL Server從入門到精通(三)

SQL Server從入門到精通(四)

SQL Server從入門到精通(五)

目錄

一、索引的概述

二、索引的類型

三、索引的建立和使用

四、查詢中的執行計劃

五、索引使用中的維護

好了今天我們就正式進入SOL Server的學習

一、索引的概述

1.索引:是SQL 編排資料的内部方法,為SQL Server提供了一種方法來編排查詢資料

2.索引的分類:

(1)聚集索引:正文内容本身就是一種按照一定規則排列的目錄稱為“聚集索引”,例如新華字典裡面的所有字按照abcd排列

(2)非聚集索引:目錄純粹是目錄,正文純粹是正文的排序,例如:新華字典裡按照偏旁查詢字,偏旁在一個空間,字在一個空間

3.作用:大大提高資料庫的檢索速度,改善資料庫性能

4.建立索引的原則:

  1.每個表隻能建立一個聚集索引

  2.每個表最多可以建立249個非聚集索引

  3.在經常查詢的字段上建立索引

  4.text,image,bit資料類型的列上不要建立索引

  5.外鍵列可以建立索引

  6.主鍵列必須建立索引

  7.重複值比較多,查詢較少的列上不要建立索引

二、索引的類型

文字多主要是讓大家了解,省略一點總感覺怪怪滴

1.聚集索引和非聚集索引

行的實體存儲順序與索引順序完全相同,每個表隻允許建立一個聚集索引。而非聚集索引不改變表中資料行的實體存儲順序。

使用聚集索引檢索資料要比非聚集索引快。SQL Server 為主鍵限制建立的索引為聚集索引,但這一預設設定可以使用 NONCLUSTERED 關鍵字改變。同樣,預設情況下,SQL Server 為 UIQUE 限制所建立的索引為非聚集索引,這一預設設定可以使用 CLUSTERED 關鍵字改變。

在 CREATE INDEX 語句中,使用CLUSTERED 選項可以建立聚集索引。

聚集索引可以使用 NONCLUSTERED 關鍵字改變為非聚集索引。

一個表最多可以建立 249 個非聚集索引。

2.主鍵索引和非主鍵索引

表定義主鍵時自動建立主鍵索引,并且會自動建立聚集索引。

非主鍵索引是在非主鍵的屬性列上建立的索引,這些索引一般都是非聚集索引,除非主鍵索引通過 NONCLUSTERED 關鍵字改變為非聚集索引,才可以在某個非主鍵列上建立聚集索引。

3.惟一索引和非惟一索引

惟一索引可以確定索引列中不包含重複值。

如果某列包含多行 NULL 值,不能在該列上建立惟一索引。

在 CREATE TABLE 或 ALTER TABLE 語句中設定 PRIMARY KEY 限制或 UNIQUE

限制時,SQL Server 自動為這些限制建立惟一索引;在 CREATE INDEX 語句中使用 UNIQUE

選項也可建立惟一索引。

4.單列索引

單列索引是指對表中單個列建立索引。多數情況下,單列索引是建立索引首選考慮的索

引。因為單列索引代價相對較小,而對資料庫查詢效能提高很大。

5.單列索引和複合索引

單列索引是指對表中單個列建立索引。

而一個索引中包含了一個以上的列稱為複合索引,最多可以有 16 個列複合到一個索引中,并且這些列必須位于同一個表中,複合的多列索引允許某一列具有相同的值。

複合索引值的最大長度為 900 個位元組。

例如,不可定義為

char(300)、char(300)和 char(301)的三個列上建立單個索引,因為總寬度超過了 900 位元組。

在使用複合索引檢索時,把被索引的列作為一個機關。複合索引中的列順序可以和表中

的列順序不同。在複合索引中應該首先定義最可能具有惟一性的屬性列。

三、索引的建立和使用

索引的建立

SQL Server從入門到精通(六)
SQL Server從入門到精通(六)

使用T—SQL 語句建立索引

USE xmgl
GO   --建立索引
IF EXISTS(SELECT* FROM sysindexes WHERE name='emp_id')--建立索引之前要判斷是否存在索引
DROP INDEX UserInfo.emp_id--表名.索引名
GO--先判斷索引是否存在存在則删除 GO 批處理
CREATE NONCLUSTERED INDEX emp_id-- NONCLUSTERED 非聚集索引 INDEX代表建立的是索引
ON 員工表(員工号)--ON代表在哪個表哪個列(索引關鍵字)
WITH  FILLFACTOR =80  --代表填充因子為80
GO
           
SQL Server從入門到精通(六)

重命名 索引名這裡小編順帶擴充一下

修改表名

--修改表名
EXEC sp_rename @objname = '舊表名', @newname = '新表名'
EXEC sp_rename '舊表名', '新表名'
exec sp_rename @objname='emp_id',@newname='員工表_員工号',@objtype='index'--修改索引名的方法一
GO
exec sp_rename'emp_id','員工表_員工号','index'   --修改索引名的方法二 
GO
           

修改字段名

--修改列名
EXEC sp_rename @objname = '表名.舊列名', @newname = '新列名', @objtype = 'column'
EXEC sp_rename '表名.舊列名', '新列名', 'column'

--例1 把表TABLE的列tid改為id
EXEC sp_rename @objname = 'TABLE.tid', @newname = 'id', @objtype = 'column'

--例2(簡寫)把表TABLE的列tid改為id
EXEC sp_rename 'TABLE.tid', @newname = 'id', @objtype = 'column'
           

修改索引名

--修改索引名
EXEC sp_rename @objname = '表名.舊索引名', @newname = '新索引名', @objtype = 'index'
EXEC sp_rename '表名.舊索引名', '新索引名', 'index'

--例1 把表TABLE的列tid改為id
EXEC sp_rename @objname = 'TABLE.IDX_TYPE_CODE', @newname = 'IDX_CODE', @objtype = 'index'

--例2(簡寫)把表TABLE的索引IDX_TYPE_CODE改為IDX_CODE
EXEC sp_rename 'TABLE.IDX_TYPE_CODE', 'IDX_CODE', 'index'
           

删除索引

文法

--聲明資料庫引用
use 資料庫名;
go

--删除索引
if exists(select * from sysindexes where name=索引名稱)
drop index 索引名稱 on 表名;
go
           

示例:

--聲明資料庫引用
use testss;
go

--删除索引
if exists(select * from sysindexes where name='pathxmlindex')
drop index pathxmlindex on test1;
go
           

索引的使用## 标題

SQL Server從入門到精通(六)

四、查詢中的執行計劃

索引和為索引執行計劃比較

差別是,

有索引的:一般是索引掃描或聚集索引掃描 (seek)

沒有索引的:是表掃描(sacn)

現在查詢分析器已經很智能了,某些表有索引的情況下,也不是一定使用索引,它會判斷io、預讀,來自動的使用表掃描和索引掃描。

1.檢測堆結構

2.檢測聚集索引

3.檢測非聚集索引

資料查詢方式

這裡就大家來看這幾張圖的講解吧,小編自己說也說不清楚

SQL Server從入門到精通(六)
SQL Server從入門到精通(六)

五、索引使用中的維護

建立了索引就要維護,來保證索引的統計資訊是有效的,這樣才能提高查找速度

維護索引的統計資訊

--顯示指定索引的統計資訊。
USE教學管理
GO
DBCC SHOW STATISTICS(學生表備份, CLID X學生表備份身份)
--顯示學生表_備份上CLID X_學生表_備份_身份索引的統計資訊
GO


---更新指定表的索引統計資訊。
USE教學管理
  GO
  UPDATE STATISTICS 學生表     --更新學生表的所有索引的統計GO


--對指定資料庫中所有表的索引統計進行更新。
 USE教學管理
  GO
 EXECUTE sp_updatestats
           

維護索引鎖片

索引碎片類型

内部碎片:當索引頁裡還有空間可以利用,出現的碎片是内部碎片

外部碎片:當資料頁的邏輯順序和實體順序不比對,或者一個表的存儲區不連續,出現的碎片是外部碎片

索引碎片的檢測

文法DBCC SHOWCONTING 指令檢視索引碎片

文法格式:

DBCC SHOWCONTING(表名,索引名)
           

例題

USE 教學管理
GO
DBCC SHOWCONTING(學生表_備份)
           

重新和整理索引

(1)DROP INDEX 和CREATE INDEX

(2)DBCC DBREINDEX在一次操作裡重建一個表上的所有索引,但重建索引時表不可用

(3)DBCC INDEXDEFRAG删除索引碎片,提高索引掃描性能

格式;

DBCC INDEXDEFRAG (資料庫名,表名|視圖名,索引名)

記得點贊加關注偶

SQL Server從入門到精通(六)