根本區別
聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致。
聚集索引
聚集索引表記錄的排列順序和索引的排列順序一致,所以查詢效率快,只要找到第乙個索引值記錄,其餘就連續性的記錄在物理也一樣連續存放。聚集索引對應的缺點就是修改慢,因為為了保證表中記錄的物理和索引順序一致,在記錄插入的時候,會對資料頁重新排序。
非聚集索引
非聚集索引制定了表中記錄的邏輯順序,但是記錄的物理和索引不一定一致,兩種索引都採用b+樹結構,非聚集索引的葉子層並不和實際資料頁相重疊,而採用葉子層包含乙個指向表中的記錄在資料頁中的指標方式。非聚集索引層次多,不會造成資料重排。
例子對比兩種索引
聚集索引就類似新華字典中的拼音排序索引,都是按順序進行,例如找到字典中的「愛」,就裡面順序執行找到「癌」。而非聚集索引則類似於筆畫排序,索引順序和物理順序並不是按順序存放的。
索引建立demo
create database indexdemo
go use indexdemo
go create table abc
( a int not null,
b char(10),
c varchar(10)
) go
insert into abc select 1,'b','c'
union select 5,'b','c'
union select 7,'b','c'
union select 9,'b','c'
go select * from abc
這個時候檢視表記錄,如圖一顯示
這個時候插入一條資料,
insert into abc values('6','b','c')
此時的查詢記錄為圖二展示
新增聚集索引,再查詢資料顯示為圖三,此時發現表的順序發生了變化,此時的排序按a欄位的遞增排序。
刪除聚集索引,會發現表的順序不會發生改變。
drop index abc.clu_abc
新增非聚集索引,新增新的記錄,檢視表順序,如圖四,並沒有影響表的順序。
原文:
聚集索引 和 非聚集索引區別
一.mysql的索引 mysql中,不同的儲存引擎對索引的實現方式不同,大致說下myisam和innodb兩種儲存引擎。myisam的b tree的葉子節點上的data,並不是資料本身,而是資料存放的位址。主索引和輔助索引沒啥區別,只是主索引中的key一定得是唯一的。這裡的索引都是非聚簇索引。myi...
聚集索引和非聚集索引區別
聚集索引 資料行的物理順序與列值 一般是主鍵那一列 的邏輯順序相同,乙個表只能擁有乙個聚集索引!非聚集索引 該索引中索引的邏輯順序與磁碟上行的物理順序不同乙個表可以擁有多個非聚集索引!非聚集索引可細分成普通索引,唯一索引,全文索引 區別 聚集索引 可以幫助把很大的範圍,迅速減小範圍。但是查詢該記錄,...
聚集索引和非聚集索引的區別
暫且摘錄如下 摘錄1 前者加在不常更新的表,後者加在經常更新的表 摘錄2 使用聚集索引 聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣...