叢集與非叢集索引
資料庫的索引,就像書本的索引資訊一樣,用來提升資料詢找的效率。 但是索引的建立,卻不是隨便的,也不是越多越好,正確的設定才可以真正提升 SQL Server 的執行效率。 本節目錄: 認識【叢集索引】與【非叢集索引】 如何使用語法建立、刪除、停用、啟用索引 重建索引與重組索引 索引設立原則 如何判斷Table中哪些欄位有建立索引 如何找出資料庫裡是否建立了多餘的索引 如何得知索引使用空間大小 如何得知索引使用次數 認識【叢集索引】與【非叢集索引】 索引 SQL Server 透過 平衡樹 (B-Tree)來建立 索引 ,B-Tree 是由一個 根節點 和 N 個 中間級節點 加 N 個 葉級節點 組成。 在 SQL SERVER 裏面資料空間都是以 頁 (Page)為一個單位,存放索引的空間就叫 索引頁 ,存放資料的空間就叫 資料頁 。 你可以把頁想像成就像硬碟裏的"磁區",不管資料頁或者是索引頁,一個頁的大小就是 8K ,實際上可以存的大小是 8060 byte。 例如,若有個Table共有100筆資料,若我們要針對一個 char(60) 欄位建立索引,則索引行共需要100 x 60 = 6k byte的大小。 這個大小可以塞到同一個頁當中(因為一頁有8K的空間)。 這一頁裏面,會包含根級和葉級的索引行。 當這個 Table 有 135 筆資料時,則索引共需要 135 x 60 = 8100 byte的大小。 這時候一頁 (8060 byte) 就塞不進去這麼多索引了。 此時會需要三個頁,為什麼? 因為第一頁要放 135 筆資料中的前半部索引,第二頁放 135 筆中的後半部索引,而第三頁只有二行索引,分別指向第一頁及第二頁。(此時沒有中間級的索引頁)。 以這個例子來看,一個頁最多可以存放 134 行,所以就可以指向 134 個葉級子頁,因此共可以索引134 x 134 = 17956 個資料行。由此可知,如果資料行數大於17956,則會有中間層出現。 當中間層出現時,則可以存放134 x 134 x 134 = 2406104 行索引。 索引的維護工作通常發生在Insert的時候。 當Insert一筆資料時,同時也得將資料插到正確的索引頁中,而且索引頁中的資料還要進行重新排序才行。 所以,若一個table建立了三個索引,inse...