sql索引聚集
Ⅰ sql 索引怎麼去理解並應用
1、聚集索引和非聚集索引
在SQL Server 2000資料庫中,按照存儲結構的不同,可以將索引分為聚集索引和非聚集索引。
聚集索引
聚集索引對表在物理數據頁中的數據按索引列進行排序,然後再重新存儲到磁碟上。即數據的實際存儲按索引列值的大小順序安排。由於表中的數據行只能以一種排序方式存儲在磁碟上,所以一個表只能有一個聚集索引。(排序、重新存儲數據行、建立聚集索引)
聚集索引對表中的數據一一進行排序,因此用聚集索引查找數據很快。但由於聚集索引需要將表的所有數據完全重新排列,所需要的空間也就特別大,大概相當於表中數據所佔的120%。聚集索引一般創建在表中經常搜索的列或者按順序訪問的列上。
使用聚集索引的好處
�8�5 聚集索引對於那些經常要搜索范圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。
�8�5 如果經常按照某一列,對從表中檢索出來的數據進行排序,那對這一列創建聚集索引講避免每次都對數據排序。
非聚集索引
非聚集索引具有完全獨立於數據行的結構,使用非聚集索引不會影響數據表中記錄的實際存儲順序。在一個表中最多可創建249個非聚集索引。
有些表包含多個索引。例如,上例中的索引1、2,還可以按學生姓名屬性創建索引3,因為這是查找學生信息的最常用的方法。對於非聚集索引也是如此。可以為在表中查找數據時常用的每個列創建一個非聚集索引。
由於非聚集索引使用索引頁存儲,因此它比聚集索引需要較少的存儲空間,但檢索效率比聚集索引低。但由於一個表只能創建一個聚集索引,當用戶需要建立多個索引時,就需要使用非聚集索引了。
Ⅱ SQL聚集索引和非聚集索引的區別
聚集索引:也稱 Clustered Index。是指關系表記錄的物理順序與索引的邏輯順序相同。由於一張表只能按照一種物理順序存放,一張表最多也只能存在一個聚集索引。與非聚集索引相比,聚集索引有著更快的檢索速度。
MySQL 里只有 INNODB 表支持聚集索引,INNODB 表數據本身就是聚集索引,也就是常說 IOT,索引組織表。非葉子節點按照主鍵順序存放,葉子節點存放主鍵以及對應的行記錄。所以對 INNODB 表進行全表順序掃描會非常快。
非聚集索引:也叫 Secondary Index。指的是非葉子節點按照索引的鍵值順序存放,葉子節點存放索引鍵值以及對應的主鍵鍵值。MySQL 里除了 INNODB 表主鍵外,其他的都是二級索引。MYISAM,memory 等引擎的表索引都是非聚集索引。簡單點說,就是索引與行數據分開存儲。一張表可以有多個二級索引。
關鍵詞:愛可生、開源資料庫、數據監測、資料庫運維
Ⅲ SQL聚集索引和非聚集索引的區別
資料庫的索引,聽起來挺神秘的,仔細想想。這些索引,其實就是平時咱們查東西時候常用的兩種手段。無非就是為了提高我們找東西的效率而已。那麼我們平時又是怎麼查東西呢?
聚集索引:
聚集索引,來源於生活嘗試。這中索引可以說是按照數據的物理存儲進行劃分的。對於一堆記錄來說,使用聚集索引就是對這堆記錄 進行 堆劃分。即主要描述的是物理上的存儲。
舉個例子:
比如圖書館新進了一批書。那麼這些書需要放到圖書館內。書如何放呢?一般都有一個規則,雜志類的放到101房間,文學類的放到102房間,理工類的放到103房間等等。這些存儲的規則決定了每本書應該放到哪裡。而這個例子中聚集索引為書的類別。
正式因為這種存儲規則,才導致 聚集索引的唯一性。
誤區:
有的人認為,聚集索引的欄位是唯一的。這是因為sql server 中添加主鍵的時候,自動給主鍵所在的欄位生成一個聚集索引。所以人們會認為聚集索引所加的欄位是唯一的。
思考一下上面這個問題。雜志類的書放到101房間。那麼如果雜志類的書太多,一個101房間存放不下。那麼可能101,201兩個房間來存放雜志類的書籍。如果這樣分析的話,那麼一個雜志類對應多個房間。放到表存儲的話,那麼這個類別欄位 就不是唯一的了。
非聚集索引:
非聚集索引,也可以從生活中找到映射。非聚集索引強調的是邏輯分類。可以說是定義了一套存儲規則,而需要有一塊控制項來維護這個規則,這個被稱之為索引表。
繼續使用上述提到的例子:
同學如果想去圖書館找一本書,而不知道這本書在哪裡?那麼這個同學首先應該找的就是 檢索室吧。對於要查找一本書來說,在檢索室查是一個非常快捷的的途徑了吧。但是,在檢索室中你查到了該書在XX室XX書架的信息。你的查詢結束了嗎?沒有吧。你僅僅找到了目的書的位置信息,你還要去該位置去取書。
對於這種方式來說,你需要兩個步驟:
1、查詢該記錄所在的位置。
2、通過該位置去取要找的記錄。
區別:
聚集索引:可以幫助把很大的范圍,迅速減小范圍。但是查找該記錄,就要從這個小范圍中Scan了。
非聚集索引:把一個很大的范圍,轉換成一個小的地圖。你需要在這個小地圖中找你要尋找的信息的位置。然後通過這個位置,再去找你所需要的記錄。
索引與主鍵的區別
主鍵:主鍵是唯一的,用於快速定位一條記錄。
聚集索引:聚集索引也是唯一的。(因為聚集索引的劃分依據是物理存儲)。而聚集索引的主要是為了快速的縮小查找范圍,即記錄數目未定。
主鍵和索引沒有關系。他們的用途相近。如果聚集索引加上唯一性約束之後,他們的作用就一樣了。
使用場景
基於上述的兩種規則,那麼在什麼時候適合聚集索引,什麼時候適合非聚集索引?