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