? ? ? ? 表和索引是如何組織和使用的,在很大程度上取決于具體的關系型DBMS,然而它們都依賴于大致相似的結構和原則。
索引頁和表頁
? ? ? ? 表行和索引行都被存儲在頁中。頁的大小一般為4kb,這是一個可以滿足大部分需求的大小,也可以是其他大小,這不是一個重要的考慮點。頁的大小僅僅決定了一個頁可以存儲多少個索引行、表行,以及一共需要多少頁來存儲表或者索引。
? ? ? ? 緩沖池和I/O活動都是基于頁的,一次將一個完整的頁讀取到緩沖池。
索引行
? ? ? ? 對于一個唯一索引,一個索引行等同于葉子頁中的一個索引條目。字段的值從表中復制到索引上,并加上一個指向表中記錄的指針。
????????對于一個非唯一索引,一個特定的索引值所對應的索引行應該被想象成獨立的索引條目,每一個索引條目都含有相同的索引值,但是卻有不同的指針。
????????大多數情況下,非唯一索引的實際存儲方式是一個索引值后帶著多個指針。
索引結構
? ? ? ? 非葉子頁通常包含著一個鍵值,以及一個指向下一層級頁的指針,該鍵值是下一層級頁中的最大鍵值,多個索引層級按照這一方式逐層建立,直到只剩下一個頁——根頁。這種組織方式的索引叫做B樹索引。通過這種索引方式查找任何一條索引記錄都需要訪問相同數量的非葉子頁。
表行
? ? ? ? 每一個索引行都指向表中相對應的一行記錄,指針通常標識了記錄所存放的頁以及它在頁中的位置。
? ? ? ? 表中的每一行除了存儲行的字段以外,還包含了一些控制信息用于定義行并幫助DBMS處理插入或者刪除操作。
? ? ? ? 當加載表或者向表中插入記錄的時候,表中記錄的順序可以被定義成和它的某一個索引記錄相同的順序。在這種情況下,當索引行被按順序處理時,對應的表行也將依照相同的順序逐個處理,這是一個效率很高的過程。