Linux

索引建議

  • June 7, 2012

作為一個理論數據庫問題,如果您被問到“您會提出哪些索引以及為什麼?” 和索引的答案是primary什麼?我們怎麼知道我們是否應該引入其中一個 vs a ?clustering``secondary``B-Tree

這應該從一個簡單的索引的角度來看,因為我問的是與索引相關的課程材料,其中我已經介紹了一些介紹性材料。

primarysecondary索引與和索引正交b-treehash並且它們都與clusterednon-clustered索引正交。

  • 第一類索引是邏輯索引。它們是有關資料結構的高級指標。主鍵應該唯一標識您的數據,這意味著它應該是關係數據庫理論所稱的“候選鍵”之一。二級索引用於加速對主索引以外的其他欄位的查詢,它們不需要是候選鍵。
  • 第二類是特定的索引實現,適合稍微不同的查詢。b-tree可以完成範圍查詢(WHERE c > 3 AND c < 7)而hash不能。hash然而,在精確查詢 ( ) 的平均情況下是 O(1)(恆定時間)WHERE c = 5,而b-tree總是 O(lg n)(對數時間)。b-tree並且hash都是定義良好的資料結構,但它們與您的實際數據幾乎沒有關係。
  • 第三類定義整個表是否在磁碟上按索引的排序順序進行排序。如果是這種情況,則稱為clustered索引。

如您所見,索引可以是從這三個不同類中提取的一個primary clustered b-tree或一個或其他一些組合。primary clustered hash


如果你被問到要引入哪些指數,答案首先來自第一堂課。問題可能與架構有關。這至少是你的起點。只有當您決定要引入哪些索引時,您才需要考慮它們是否應該是 b 樹、集群等。第一類是合乎邏輯的,與您使用數據的方式緊密相關。其他的是實現細節。

引用自:https://serverfault.com/questions/396343