資料庫 SQL索引基礎

2021-07-23 03:39:28 字數 1427 閱讀 8689

sql索引目錄

要想做好索引優化,知道索引的儲存結構是至關重要的。談到儲存就需要了解sql中的頁和區的概念:  

乙個區包含8個頁,它是管理空間的單位,分為如下兩類

一般情況下,給表或者索引申請新的空間時,從混合區分配,當這個表或者索引的空間超過8個頁大小時,會將原本在混合區的頁轉移到統一區管理。

知識了區以及頁的概念,再看下資料表和這兩者之間的聯絡, 表包含乙個或多個分割槽,每個分割槽在乙個堆或乙個聚集索引結構中包含資料行。從下圖的結構中,我們就看到了索引的重要結構b-樹了。

索引中的底層節點稱為葉節點。根節點與葉節點之間的任何索引級別統稱為中間級。在聚集索引中,葉節點包含基礎表的資料頁。根節點和中間級節點包含存有索引行的索引頁。每個索引行包含乙個鍵值和乙個指標,該指標指向 b -樹上的某一中間級頁或葉級索引中的某個資料行。每級索引中的頁均被鏈結在雙向鏈結列表中。

非聚集索引與聚集索引之間的顯著差別在於以下兩點:

我們先看下b-樹,這種索引結構有乙個重要的引數n,它決定了索引儲存頁的布局,每個儲存頁需要存放n個節點,以及n+1個指標。 這裡我們來做個計算:比如我們的索引是乙個整形數字,4個位元組,指標需要8個位元組,這裡不考慮索引頁標頭資訊的占用,算下最大的n,公式: 4n+8(n+1)<=8*1024 ,這個值是680,即最大可存放680個鍵,再按b-樹充滿度來取75%等於510,根結點有510個,那麼它會有510*510個葉結點,這些葉結點會有510*510*510個指向最終記錄的指標。這個資料足以說明絕多數情況下,只要三層就能夠用。

索引中的鍵順序與資料檔案中的排序順序相同,所以我們的索引結構中,葉級均採用稿密索引。

它只為每個儲存塊設計鍵-指針對,比稿密索引節約空間,出現在葉級之上的結構中。

要想回答這個問題,就需要了解索引在維護過程中對於b-樹的調整,sql會通過一定的演算法將b-樹的充滿度達到一定的平衡,這裡就會涉及的節點的拆分以及合併,所以一般情況下無論對資料做怎樣的更新,也不會出現下圖中如此不平衡的情況。

注:如果問重建索引的好處時,如果你回答是為了平衡b-樹,那麼要謹慎回答。

資料庫 SQL索引基礎

sql索引目錄 要想做好索引優化,知道索引的儲存結構是至關重要的。談到儲存就需要了解sql中的頁和區的概念 乙個區包含8個頁,它是管理空間的單位,分為如下兩類 一般情況下,給表或者索引申請新的空間時,從混合區分配,當這個表或者索引的空間超過8個頁大小時,會將原本在混合區的頁轉移到統一區管理。知識了區...

SQL資料庫索引

索引的用途 通過索引來加快資料處理速度。對資料查詢及處理速度已經成為衡量應用系統的標準。索引的優點 加快訪問速度,加強行的唯一性。索引型別 1.唯一索引 唯一索引不允許兩行具有相同的索引值。2.主鍵索引 為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中每乙個值是唯...

SQL資料庫 索引

一直對建立索引有什麼用?怎麼用?不太清楚。建立索引後會單獨存放,先去索引中查詢再到表中查詢索引中指定的位置。據說使用的是b 樹,有時間在慢慢了解。為什麼要建立索引呢?這是因為,建立索引可以大大提高系統的效能。第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快 資料的檢...