DB2索引創建都應該哪些原則呢?這是很多人都提到的問題,下面就為您詳細介紹DB2索引創建原則,供您參考學習。
DB2索引實現是一個B+樹,通過索引可以實現快速查詢,避免全表掃描以此來減少IO操作。
索引是對表數據的一種抽象,通過抽取有限數據,對數據的分布進行計算,以此來完成對數據的快速檢索。
索引創建語句
- CREATE INDEX <INDEX_NAME> ON <TABLE_NAME> (<COLNAME1,COLNAME2…>)
創建索引需要注意的地方:
索引應該用來提高查詢速度,但是會對更新和刪除操作帶來負面影響,因為要同步更新索引。所以索引應該創建到更新、刪除相對比讀取少的表上。
索引需要獨立的空間進行存儲和管理。索引是需要磁盤空間來存儲。所以避免重復創建冗余索引。如下:
- “CREATE TABLE TEST_IDX (COL1 INT NOT NULL, COL2 INT NOT NULL, COL3 IN NOT NULL)”“CREATE INDEX TEST_IDX_IDX1 ON TEST_IDX (COL1, COL2, COL3)”
已經有索引TEST_IDX_IDX1在三個列上,在創建”CREATE INDEX TEST_IDX_IDX2 ON TEST_IDX (COL1, COL2)”,這樣的索引一般沒有什麼作用。
索引用來避免表掃描。通過索引對大量數據抽取有限部分,形成一個相對少量的有序數據結構,通過對有序數據結構的查找可以快速想要查找的數據。所以索引適合建立在數據量比較大的表上,而且該表上的查詢經常是根據條件查詢部分數據。比如一些系統基礎表,如SYSTEM表,這些表數據量小,而且經常是查詢全部數據,所以這些表上建立索引對性能的影響不是很大,完全可以避免,以免對管理造成影響。
創建索引的目的還有一個就是保證數據唯一性,可以利用”CREATE UNIQUE INDEX <INDEX_NAME> ON <TABLENAME> (<COLNAME>)”,來完成。
主鍵會隱式創建索引,所以請不要在主鍵上創建索引浪費空間。
盡量減少索引的創建。DB2路徑訪問優化器會根據表中所提供的索引來完成盡可能多的訪問路徑的成本估計。創建過多的索引意味著DB2優化器生成更多的訪問路徑,完成更多的訪問計劃成本估算,這會增加SQL語句編譯時間。
創建唯一索引可以避免排序。因為索引是有序數據結構,在進行掃描時,DB2會默認按照順序輸出結果,而不是按照插入先後。通過創建唯一索引可以避免排序,提高查詢性能。
具有大量重復數據的列上不要創建索引。在大量重復的列上創建索引沒有任何意義。如下數據結構:表中字段col1有大量重復數據,其中的數據分布是按照90%的Y,和10%的N來分布。這樣的列上創建索引沒有任何意義。在查詢條件為col1=‘Y’時,該表的索引掃描和表掃描沒有特大差異。根據實踐經驗,列上的數據分布應該均勻,並且抽密度不能大於5 ‰。
創建如下表:
- “CREATE TABLE TEST1 (NO INT NOT NULL, NAME CHAR(5))”
- “CREATE INDEX TEST1_IDX_1 ON TEST1 (NO)”
- “INSERT INTO TEST1 SELECT ROW_NUMBER() OVER(), CHR(INT(RAND()*75+48))||CHR(INT(RAND()*75+48))||CHR(INT(RAND()*75+48)) FROM SYSCAT.COLUMNS T1 JOIN SYSCAT.COLUMNS T2 ON T1.COLNAME!=T2.COLNAME FETCH FIRST 100 ROWS ONLY“
- “SELECT * FROM TEST1 WHERE NO = 50”
以上就是DB2索引創建原則介紹。