數據庫聚集索引和非聚集索引

本文轉載自:http://blog.csdn.net/zc474235918/article/details/50580639


數據庫的索引,聽起來挺神祕的,仔細想想。這些索引,其實就是平時咱們查東西時候常用的兩種手段。無非就是爲了提高我們找東西的效率而已。那麼我們平時又是怎麼查東西呢? 

聚集索引:


       聚集索引,來源於生活嘗試。這中索引可以說是按照數據的物理存儲進行劃分的。對於一堆記錄來說,使用聚集索引就是對這堆記錄 進行 堆劃分。即主要描述的是物理上的存儲。

舉個例子:


       比如圖書館新進了一批書。那麼這些書需要放到圖書館內。書如何放呢?一般都有一個規則,雜誌類的放到101房間,文學類的放到102房間,理工類的放到103房間等等。這些存儲的規則決定了每本書應該放到哪裏。而這個例子中聚集索引爲書的類別。 
       正式因爲這種存儲規則,才導致 聚集索引的唯一性。

誤區:


       有的人認爲,聚集索引的字段是唯一的。這是因爲sql server 中添加主鍵的時候,自動給主鍵所在的字段生成一個聚集索引。所以人們會認爲聚集索引所加的字段是唯一的。 
       思考一下上面這個問題。雜誌類的書放到101房間。那麼如果雜誌類的書太多,一個101房間存放不下。那麼可能101,201兩個房間來存放雜誌類的書籍。如果這樣分析的話,那麼一個雜誌類對應多個房間。放到表存儲的話,那麼這個類別字段 就不是唯一的了。 

非聚集索引:


       非聚集索引,也可以從生活中找到映射。非聚集索引強調的是邏輯分類。可以說是定義了一套存儲規則,而需要有一塊控件來維護這個規則,這個被稱之爲索引表。

繼續使用上述提到的例子:


       同學如果想去圖書館找一本書,而不知道這本書在哪裏?那麼這個同學首先應該找的就是 檢索室吧。對於要查找一本書來說,在檢索室查是一個非常快捷的的途徑了吧。但是,在檢索室中你查到了該書在XX室XX書架的信息。你的查詢結束了嗎?沒有吧。你僅僅找到了目的書的位置信息,你還要去該位置去取書。


對於這種方式來說,你需要兩個步驟: 
       1、查詢該記錄所在的位置。 
       2、通過該位置去取要找的記錄。

區別:


       聚集索引:可以幫助把很大的範圍,迅速減小範圍。但是查找該記錄,就要從這個小範圍中Scan了。 
       非聚集索引:把一個很大的範圍,轉換成一個小的地圖。你需要在這個小地圖中找你要尋找的信息的位置。然後通過這個位置,再去找你所需要的記錄。

索引與主鍵的區別


       主鍵:主鍵是唯一的,用於快速定位一條記錄。 
       聚集索引:聚集索引也是唯一的。(因爲聚集索引的劃分依據是物理存儲)。而聚集索引的主要是爲了快速的縮小查找範圍,即記錄數目未定。 
       主鍵和索引沒有關係。他們的用途相近。如果聚集索引加上唯一性約束之後,他們的作用就一樣了。

使用場景


基於上述的兩種規則,那麼在什麼時候適合聚集索引,什麼時候適合非聚集索引? 
試用場景


       如果你理解了數據庫是如何使用索引的,那麼你在看上一篇文章《高併發下update產生的死鎖》就很容易明白了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章