SQL Server聚集索引和非聚焦索引

1、什麼是索引?

索引在數據庫中的作用類似於目錄在書籍中的作用,用來提高查找信息的速度。使用索引查數據無需進行全表掃描,可以快速查詢所需的數據。

2、聚集索引和非聚集索引的區別?

一個表只能有一個聚集索引但可以有多個非聚集索引。

聚集索引的葉節點就是最終的數據節點,而非聚集索引的葉節仍然是索引節點,但它有一個指向最終數據的指針。

3、聚集索引和非聚焦索引的原理是什麼?

如果給表上了主鍵(索引),那麼表在磁盤上的存儲結構就由整齊排列的結構轉變成了樹狀結構,也就是B樹結構,換句話說,就是整個表就變成了一個索引。

4、爲什麼只能有一個聚集索引?

數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同。所以一張表只能存在一個聚集索引。

5、主鍵一定是聚集索引嗎?

答:不是,可以是非聚集索引,只不過默認是聚集索引,主鍵必須依賴於索引。

go
CREATE TABLE T
(
	t_id int,
	t_name nvarchar(10),
	t_count int,
	t_version int,
	constraint pk_t_t_id primary key nonclustered(t_id) -- 添加非聚集索引主鍵
)
CREATE CLUSTERED INDEX idx_t_t_id ON t(t_id);  -- 添加聚集索引

 

6、索引只能包含一列嗎?

答:可以包含多列

CREATE CLUSTERED INDEX idx_t_t_id_or_t_name ON t(t_id,t_name);  -- 添加一個包含多列的聚集索引

7、聚集索引的約束是唯一性,是否要求字段也是唯一的呢?     不要求唯一!

  分析:如果認爲是的朋友,可能是受系統默認設置的影響,一般我們指定一個表的主鍵,如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,SQL會默認在此字段上創建一個聚集索引,而主鍵都是唯一的,所以理所當然的認爲創建聚集索引的字段也需要唯一。

  結論:聚集索引可以創建在任何一列你想創建的字段上,這是從理論上講,實際情況並不能隨便指定,否則在性能上會是惡夢。

8、爲什麼聚集索引可以創建在任何一列上,如果此表沒有主鍵約束,即有可能存在重複行數據呢?

  粗一看,這還真是和聚集索引的約束相背,但實際情況真可以創建聚集索引。

  分析其原因是:如果未使用 UNIQUE 屬性創建聚集索引,數據庫引擎將向表自動添加一個四字節 uniqueifier 列。必要時,數據庫引擎 將向行自動添加一個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,用戶不能查看或訪問。

9、B樹、二叉樹、B+樹的區別

二叉樹的每個節點只能存儲一個值,B樹可以存儲M個值。B樹在每個節點都可以保存數據(鍵值對),B+樹只有在葉子節點纔可以存儲數據

10、 B樹根節點以及葉節點存儲的內容

 

圖片來源:https://blog.csdn.net/qq_33925869/article/details/89704056

11、開啓IO數量

go
set statistics io on
select * from t where t_id = 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章