牛新莊__
循序漸進
db2+dba
系統管理、運維與應用案例
5.3
索引設計
索引設計學習筆記,以及一些不能理解的問題(紅色的是有疑問的問題)
標準表的邏輯表 記錄 和索引結構
1、資料在邏輯上,按
資料頁的列表
來組織的
2、資料頁,則根據
extent
的大小,在邏輯上分組在一起。
例如:extent
大小為4
,則資料頁
0-3
組成了第乙個
extent
;資料頁
4-7
組成了第二個
extent 3
、資料頁的大小是一定的(
4k, 8k, 16k, 32k
),但是,每條記錄大小可能不同(即使同乙個表,其各個資料行的大小
也可能不同)。
對於乙個給定的資料頁(就是說:資料頁大小定了。但是,其上的各個資料行大小可能各不相同),這個頁所包含的資料條目可能會有所變化4
、每個第
500個資料頁都有乙個
fscr
,此fscr
用來對映接下來的
500個資料頁(直到下乙個
fscr
止)可供新資料行使用的空間
5、索引也是需要儲存的,並且索引儲存在
索引頁上面。在邏輯上,索引頁組織成
b+樹。對於
dms表空間,索引頁中的
rid使用
相對表空間頁號
而不是物件相對頁號
6、每個
資料頁都有相同的格式。
a) 每個資料頁
都有乙個
頁頭b)
頁頭後面是
槽目錄c)
槽目錄中的每一項
與該頁中的乙個記錄相對應(當然也是說:槽目錄中有幾項,則此資料頁上面就會有幾個記錄
也就是有幾個資料行)
d) 槽目錄中的每個項裡面的數值指示:其對應的資料行在此頁中
相對於開始位置的
位元組偏移
e) 值為
-1的條目與已刪除的記錄相對應
例如,對於上圖(上面兩個圖其實是一樣的),解釋如下:
rid是:
473,0 1
、此索引所執行的資料
位於:資料頁
473
2、在找到
473
頁上面,第
0 個槽號
3、此槽號中的值(
3800
)表示,此索引所指向的資料行,在此頁中的位元組偏移是
3800 4
、dbms
讀取索引所指向的資料時候,就可以:在
473
頁上,偏移
3800
個位元組去讀取即可
不過,我還是有個問題,偏移
3800
個位元組去讀取,但是,要讀取多少個位元組啊(也就是說,此資料行長度是多少啊,而且,按著我的理解,即使同乙個表,其每個資料行也可能是會變化的啊)
7、實際刪除記錄後,會在
資料頁上留下的
嵌入可用空間,對於這些空間,重組表時,這些
嵌入可用空間
會被轉換成
可用空間(這也意味著,如果
不重組表,則
嵌入可用空間
就會被一直浪費著)
8、明天好好理解下
索引的b+
樹結構
DB2 索引整理
create index 語句的pctfree子句指定建立索引時,每個索引頁中要留作空閒空間的百分比。在索引頁上保留更多的空閒空間將導致更小的頁分割,這將減少為重新獲得順序索引頁面而重組表的需要,從而增加預訪問,而預訪問是乙個可以提高效能的重要部件。此外,如果總是存在大關鍵字值,那麼就要考慮降低cr...
DB2 索引設計準則
db2 索引設計準則 1.乙個表如果建有大量索引會影響 insert update 和 delete 語句的效能,因為在表中的資料更改時,所有索引都須進行適當的調整。另一方面,對於不需要修改資料的查詢 select 語句 大量索引有助於提高效能,因為資料庫有更多的索引可供選擇,以便確定以最快速度訪問...
db2索引設計準則
首先說一下索引的好處,這幾天做了乙個功能,寫了乙個儲存過程當資料量是4000的時候,竟然跑了30分鐘,加上索引並優化以後,只要了30s多一點,所以索引真的很重要,只要是where條件中用到的字段都是可以用作索引的。還有就是寫sql語句一定要注意演算法,有時演算法的好與壞有非常大的影響。1.乙個表如果...