A. 資料庫的聚集索引與非聚集索引
一.聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。
聚集索引確定表中數據的物理順序。聚集索引類似於電話簿,後者按姓氏排列數據。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
1.聚集索引使用注意事項
①定義聚集索引鍵時使用的列越少越好。
②包含大量非重復值的列。
③使用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=。
④被連續訪問的列。
⑤回大型結果集的查詢。
經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 SQL Server 不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。
⑥OLTP 類型的應用程序,這些程序要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創建聚集索引。
2.聚集索引不適用於:
①頻繁更改的列。這將導致整行移動(因為 SQL Server 必須按物理順序保留行中的數據值)。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。
②寬鍵。來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。
二.非聚集索引:數據存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數據的存儲位置。
1.非聚集索引中的項目按索引鍵值的順序存儲,而表中的信息按另一種順序存儲(這可以由聚集索引規定)。對於非聚集索引,可以為在表非聚集索引中查找數據時常用的每個列創建一個非聚集索引。有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引,因為這是讀者查找信息的兩種最常用的方法。
2.一個通俗的舉例,說明兩者的區別
其實,漢語字典的正文本身就是一個聚集索引。比如,要查「安」字,就會很自然地翻開字典的前幾頁,因為「安」的拼音是「an」,而按照拼音排序漢字的字典是以英文字母「a」開頭並以「z」結尾的,那麼「安」字就自然地排在字典的前部。如果翻完了所有以「a」開頭的部分仍然找不到這個字,那麼就說明的字典中沒有這個字;同樣的,如果查「張」字,那也會將的字典翻到最後部分,因為「張」的拼音是「zhang」。也就是說,字典的正文部分本身就是一個目錄,不需要再去查其他目錄來找到需要找的內容。把這種正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。
.如果認識某個字,可以快速地從自動中查到這個字。但也可能會遇到不認識的字,不知道它的發音,這時候,就不能按照剛才的方法找到要查的字,而需要去根據「偏旁部首」查到要找的字,然後根據這個字後的頁碼直接翻到某頁來找到要找的字。
但結合「部首目錄」和「檢字表」而查到的字的排序並不是真正的正文的排序方法,比如查「張」字,可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻是63頁,「張」的下面是「弩」字,頁面是390頁。很顯然,這些字並不是真正的分別位於「張」字的上下方,現在看到的連續的「馳、張、弩」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。
可以通過這種方式來找到所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到所需要的頁碼。把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。
B. 聚集索引和非聚集索引的區別是什麼(詳解)
聚集索引的缺點是對表進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排,降低了執行速度。建議使用聚集索引的場合為: a.此列包含有限數目的不同值; b.查詢的結果返回一個區間的值; c.查詢的結果返回某值相同的大量結果集。 非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了B+樹的結構,但非聚集索引的葉子層並不與實際的數據頁相重疊,而採用葉子層包含一個指向表中的記錄在數據頁中的指針的方式。非聚集索引比聚集索引層次多,添加記錄不會引起數據順序的重組。建議使用非聚集索引的場合為: a.此列包含了大量數目不同的值; b.查詢的結束返回的是少量的結果集; c.order by 子句中使用了該列。
C. 資料庫中聚集索引、非聚集索引、填充因子的概念
聚集索引(Clustered Index):對表的物理數據頁中的數據按列進行排序,然後再重新存儲到磁碟上,即如果說在一個表中建立了聚集索引,則表中的數據頁會在會按照索引的順序來存放
非聚集索引(Nonclustered Index):具有完全獨立於數據行的結構,使用非聚集索引不用將物理數據頁中的數據按列排序,即非聚集索引不會影響數據表中記錄的實際存儲順序。非聚集索引的葉節點存儲了組成非聚集索引的關鍵字值和行定位器。
填充因子:指索引中一個葉子節點的填充率,若都填滿就是100%,若填充率為50%,則只有一半的數據
D. 怎麼理解聚集索引和非聚集索引
聚簇索引即建立在聚簇上的索引,創建聚簇索引時,需要對已有表數據重新進行排序(若表中已有數據),即刪除原始的表數據後再將排序結果按物理順序插回,故聚簇索引建立完畢後,建立聚簇索引的列中的數據已經全部按序排列。一個表中只能包含一個聚簇索引,但該索引可以包含多個列。B-樹索引中,聚簇索引的葉層就是數據頁。非聚簇索引類似書本索引,索引與數據存放在不同的物理區域,建立非聚簇索引時數據本身不進行排序。一個表中科含多個非聚簇索引。B-樹索引中,非聚簇索引的葉層仍是索引頁,其以指針指向數據頁實際存儲位置。
E. SQL聚集索引和非聚集索引的區別
聚集索引:也稱 Clustered Index。是指關系表記錄的物理順序與索引的邏輯順序相同。由於一張表只能按照一種物理順序存放,一張表最多也只能存在一個聚集索引。與非聚集索引相比,聚集索引有著更快的檢索速度。
MySQL 里只有 INNODB 表支持聚集索引,INNODB 表數據本身就是聚集索引,也就是常說 IOT,索引組織表。非葉子節點按照主鍵順序存放,葉子節點存放主鍵以及對應的行記錄。所以對 INNODB 表進行全表順序掃描會非常快。
非聚集索引:也叫 Secondary Index。指的是非葉子節點按照索引的鍵值順序存放,葉子節點存放索引鍵值以及對應的主鍵鍵值。MySQL 里除了 INNODB 表主鍵外,其他的都是二級索引。MYISAM,memory 等引擎的表索引都是非聚集索引。簡單點說,就是索引與行數據分開存儲。一張表可以有多個二級索引。
關鍵詞:愛可生、開源資料庫、數據監測、資料庫運維
F. 聚集索引和非聚集索引的區別是什麼
1、查詢速度
聚集索引查詢數據速度快。
非聚集索引查詢數據速度慢。
2、佔用內存大小
聚集索引需要較少的內存來進行操作。
非聚集索引需要更多的內存用於操作。
3、數量不同
一個表只能有一個聚集索引。
一個表可以有多個非聚集索引。
4、本質不同
聚集索引是一種索引類型,其中表記錄在物理上被重新排序以匹配該索引。
非聚集索引是一種特殊類型的索引,其中索引的邏輯順序與磁碟上行的物理存儲順序不匹配。
5、葉節點不同
在聚簇索引中,葉節點是實際數據本身。
在非聚集索引中,葉節點不是實際數據本身,而是僅包含包含的列。
G. 按照存儲結構劃分,索引分為哪兩類各有何作用
聚集索引:對表在物理數據頁中的數據排列進行排序,然後重新存儲到磁碟上,表中的數據行只能以一種方式存儲在磁碟上,故一個表只能有一個聚集索引。創建任何非聚集索引之前必須創建聚集索引。
非聚集索引:具有完全獨立於數據行的結構,使用非聚集索引不會影響數據表中記錄的實際存儲順序。
(7)聚集索引有存儲實際數據嗎擴展閱讀
優點
1.大大加快數據的檢索速度;
2.創建唯一性索引,保證資料庫表中每一行數據的唯一性;
3.加速表和表之間的連接;
4.在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間。
缺點
1.索引需要佔物理空間。
2.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度。
H. 聚集索引和非聚集索引的區別有哪些
1、含義上的區別
聚集索引是指資料庫錶行中數據的物理順序與鍵值的邏輯(索引)順序相同。一個表只能有一個聚集索引,因為一個表的物理順序只有一種情況,所以,對應的聚集索引只能有一個。
非聚集索引是一種索引,該索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。
2、從行定位器的性質上來區別
非聚集索引可以在有聚集索引的表、堆集或索引視圖上定義。如果表有聚集索引,或者索引在索引視圖上,則行定位器就是行的聚集索引鍵。
如果表是堆集,即非聚集索引,行定位器就是指向行的指針。該指針用文件標識符 (ID)、頁碼和頁上的行數生成。
3、應用上的區別
聚集索引適合應用於含有大量非重復值的列;使用BETWEEN,>,>=,<或<=返回一個范圍值的列;被連續訪問的列;返回大型結果集的查詢;經常被使用連接或GROUP BY子句的查詢訪問的列。
非聚集索引適用於經常被分組排序的列;大數目的不同值;頻繁更新的列;外鍵列;主鍵列;頻繁修改索引列。
I. 聚集索引和非聚集索引的區別是什麼
聚集索引:其中行的物理排序與索引排序相同,並且聚集索引的最低一級(葉級)包含實際的數據行。一個表或視圖只允許同時有一個聚集索引。
在創建任何非聚集索引之前創建聚集索引。創建聚集索引時重建表上現有的非聚集索引。
如果沒有指定
clustered,則創建非聚集索引。
1、聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第一個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對表進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排,降低了執行速度。建議使用聚集索引的場合為:
a.此列包含有限數目的不同值;
b.查詢的結果返回一個區間的值;
c.查詢的結果返回某值相同的大量結果集。
非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了b+樹的結構,但非聚集索引的葉子層並不與實際的數據頁相重疊,而採用葉子層包含一個指向表中的記錄在數據頁中的指針的方式。非聚集索引比聚集索引層次多,添加記錄不會引起數據順序的重組。建議使用非聚集索引的場合為:
a.此列包含了大量數目不同的值;
b.查詢的結束返回的是少量的結果集;
c.order
by
子句中使用了該列。
2、聚集索引:其中行的物理排序與索引排序相同,並且聚集索引的最低一級(葉級)包含實際的數據行。一個表或視圖只允許同時有一個聚集索引。
在創建任何非聚集索引之前創建聚集索引。創建聚集索引時重建表上現有的非聚集索引。
如果沒有指定
clustered,則創建非聚集索引。
3、--不用索引查詢
select
*
from
indextesttable
whit(index(0))
where
status=
'b
'
--創建聚集索引
J. 資料庫中聚集索引和非聚集索引的區別 知乎
聚集索引:也稱 Clustered Index。是指關系表記錄的物理順序與索引的邏輯順序相同。由於一張表只能按照一種物理順序存放,一張表最多也只能存在一個聚集索引。與非聚集索引相比,聚集索引有著更快的檢索速度。
MySQL 里只有 INNODB 表支持聚集索引,INNODB 表數據本身就是聚集索引,也就是常說 IOT,索引組織表。非葉子節點按照主鍵順序存放,葉子節點存放主鍵以及對應的行記錄。所以對 INNODB 表進行全表順序掃描會非常快。
非聚集索引:也叫 Secondary Index。指的是非葉子節點按照索引的鍵值順序存放,葉子節點存放索引鍵值以及對應的主鍵鍵值。MySQL 里除了 INNODB 表主鍵外,其他的都是二級索引。MYISAM,memory 等引擎的表索引都是非聚集索引。簡單點說,就是索引與行數據分開存儲。一張表可以有多個二級索引。