create index 語句的pctfree子句指定建立索引時,每個索引頁中要留作空閒空間的百分比。在索引頁上保留更多的空閒空間將導致更小的頁分割,這將減少為重新獲得順序索引頁面而重組表的需要,從而增加預訪問,而預訪問是乙個可以提高效能的重要部件。此外,如果總是存在大關鍵字值,那麼就要考慮降低create index語句的pctfree子句的值。
對於唯讀表上的索引,使pctfree為0;對於其他索引,使pctfree為10(db2建表時,pctfree預設為10),以提供可用的空間,從而加快插入操作的速度。此外,對於有集群索引的表,這個值應該更大一些,以確保集群索引不會被分成太多的碎片。如果存在大量的插入操作,那麼使用15到35之間的值或許會更合適一些。
4、完全索引訪問(index access only)
create index語句的include子句指定在建立索引時,可以選擇包含附加的列資料,這些附加的列資料將與鍵儲存在一起,但實際上它們不是鍵自身的一部分,所以不被排序。在索引中包含附加列的主要原因是為了提高某些查詢的效能。db2將不需要訪問資料頁,因為索引頁早已經提供了資料值。只可以為包含的列定義唯一索引。但在強制執行索引的唯一性時不考慮被包含的列。
假設需經常獲得按id排序的員工列表,如下:
select id, name from emp order by id;
可以建立如下索引:
create index idx_emp_id on emp (id) include(name);
結果,查詢結果所需的所有資料都顯示在索引中,不需要檢索資料頁。那麼,為什麼不乾脆在索引中包括所有的資料呢?首先,這需要資料庫中的更多物理空間,因為本質上資料是在索引中複製的。其次,只要更新了資料的值,資料的所有副本都需要更新,在發生許多次更新的資料庫中,開銷相當大。
5、建立索引的相關問題
a、如果能在乙個合理的時間內結束查詢,應避免新增索引,因為索引會降低更新操作的速度並消耗額外的空間;
b、基數較大的列很適合用來做索引;
c、考慮到管理上的開銷,盡量避免在索引中使用多於5個的列;
d、對於多列索引,將查詢中引用最多的列放在定義的簽名;
e、避免新增與已有索引相似的索引。如,已在乙個表的(c1, c2)上有乙個索引index1, 但又建立乙個(c2)的索引index2。這樣,索引index2並沒有新增任何東西,它只是index1的冗餘,現在反而成了額外的開銷。
f、如果表是唯讀的,並且包含很多的行,那麼可以嘗試定義乙個索引,通過create index中的include子句使該索引包含查詢中引用的所有列(被include子句包含的列並不是索引的一部分,而只是作為索引頁的一部分來儲存,以避免附加的資料);
g、對於聯機事務處理(oltp)環境,建立乙個或兩個索引;對於唯讀查詢環境,可以建立5個以上索引;對於混合查詢和oltp環境,可以建立2到5個索引;
h、要提高對父表執行刪除和更新操作的效能,在外鍵上建立關係索引。
db2碎片整理
整理碎片 db2 reorg table db2inst1.test table reorg table 其中 reorg table 通過重構行來消除 碎片 資料並壓縮資訊,對錶進行重組。runstats on table 收集表 的統計資訊。reorgchk on table all 確定是否需...
DB2報錯的整理
db221061e 未初始化環境行命令 解決 執行db2cmd,然後在新彈出的視窗輸入命令 sql1032n 未發出啟動資料庫管理器的命令 sqlstate 57019 解決 沒有啟動例項,執行db2start 其他情況 sql1052n 資料庫路徑 d data 不存在 情況說明 用db2 cre...
DB2常用資料整理
db2 基礎 日期和時間的使用 db2 中的列組統計資訊 dba將向何處去?db2 9.5 for linux的安裝方法 db 完整性控制 db2和oracle體系結構 建立db2伺服器報表並在前端access顯示 db2 備份恢復和錯誤處理方法 修改db2預設值,降低記憶體占用 db2 v9 64...