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樹和平衡二叉樹稍有不同的是b樹屬於多叉樹又名平衡多路查詢樹(查詢路徑不只兩個),資料庫索引技術裡大量使用者b樹和
二叉樹的每個節點只能儲存乙個值,b樹可以儲存m個值。b樹在每個節點都可以儲存資料(鍵值對),b+樹只有在葉子節點才可以儲存資料
10、 b樹根節點以及葉節點儲存的內容
11、 b+樹根節點以及葉節點儲存的內容
12、開啟io數量
13、什麼是回表查詢
先通過普通索引定位到主鍵值id=***,在通過聚集索引定位到行記錄。
這就是所謂的回表查詢 ,先定位主鍵值,再定位行記錄,它的效能較掃一遍索引樹更低。
14、回表優化
將單列索引(name)公升級為聯合索引(name, ***),即可避免回表
sqlserver 聚集索引 非聚集索引
聚集索引是一種對磁碟上實際資料重新組織以按指定的一列或者多列值排序。像我們用到的漢語字典,就是乙個聚集索引。換句話說就是聚集索引會改變資料庫表中資料的存放順序。非聚集索引不會重新組織表中的資料,而是對每一行儲存索引列值並用乙個指標指向資料所在的頁面。乙個值指向多行等於該值的資料 sqlserver預...
SQL Server 聚集索引和非聚集索引的區別
非聚集索引和聚集索引的區別 不在不會詳細說明非聚集索引和聚集索引的結構有什麼不一樣,因為這種東西網上已經說的很多了。乙個表一旦建立了聚集索引,那麼那張表就是一張被b樹重新組織過的表。而沒聚集索引表就是乙個堆表。什麼是b樹,什麼是堆表就不解釋了。小弟對,非聚集索引狀況下 和 聚集索引狀況下的 常量繫結...
SQL Server 聚集索引和非聚集索引的區別
聚集索引 物理儲存按照索引排序 非聚集索引 物理儲存不按照索引排序 優勢與缺點 聚集索引 插入資料時速度要慢 時間花費在 物理儲存的排序 上,也就是首先要找到位置然後插入 查詢資料比非聚集資料的速度快 漢語字典的正文本身就是乙個聚集索引。比如,我們要查 安 字,就會很自然地翻開字典的前幾頁,因為 安...