Linux
索引建議
作為一個理論數據庫問題,如果您被問到“您會提出哪些索引以及為什麼?” 和索引的答案是
primary
什麼?我們怎麼知道我們是否應該引入其中一個 vs a ?clustering``secondary``B-Tree
這應該從一個簡單的索引的角度來看,因為我問的是與索引相關的課程材料,其中我已經介紹了一些介紹性材料。
primary
和secondary
索引與和索引正交b-tree
,hash
並且它們都與clustered
和non-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 樹、集群等。第一類是合乎邏輯的,與您使用數據的方式緊密相關。其他的是實現細節。