達夢索引測試
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可減少io,快速訪問資料庫表中的特定資訊。索引需要額外的磁碟空間,並降低寫操作的效能。在修改表內容的時候,索引會進行更新甚至重構,索引列越多,這個時間就會越長。所以只保持需要的索引有利於查詢即可。
建設原則:
1索引應該經常建在where 子句經常用到的列上。如果某個大表經常使用某個字段進行查詢,並且檢索行數小於總表行數的5%。則應該考慮。(返回資料量佔10%以上 建議使用全表掃瞄,使用多塊讀操作,提公升吞吐量)。
2 在經常訪問的多個列上建立復合索引,但要注意復合索引的建立順序(先等值再其他,返回資料量,使用頻率)
3 對於小型的表,沒必要建立索引,優化不明顯,增加開銷
4 隨著資料的變化,索引的效率會下降,因此應定期重建索引
alter index index_name rebuild
cscn :基礎全表掃瞄(a),從頭到尾,全部掃瞄
sscn :二級索引掃瞄(b), 從頭到尾,全部掃瞄
ssek :二級索引範圍掃瞄(b) ,通過鍵值精準定位到範圍或者單值
csek :聚簇索引範圍掃瞄(c) ,通過鍵值精準定位到範圍或者單值
blkup :根據二級索引的rowid 回原表中取出全部資料(b + a)
建立測試表
createtableidx (id int,name varchar(50),count int)
構造10萬條測試資料
createorreplaceprocedureproc_indexas
begin
foriin1..100000loop
insertintoidx (id,name,count)selecti,chr(mod(i,27)+65),convert(int,100*rand())fromdual;
endloop;
commit;
end;
呼叫儲存過程,可以看到idx有10萬條資料,name為a的有3千多條
沒建索引之前,檢視執行計畫
如下示例,執行計畫走了全表掃瞄cscn
建立索引,檢視執行計畫
createindexindex_tonidx (name)
explainselect/*+index(idx, index_t) */ *fromidxwherename='a'
下圖可以看到,執行計畫走了二級索引範圍掃瞄ssek
建立聚集索引
createclusterindexindex_t2onidx(id);
explainselect*fromidxwhereid >1000andid <2000
如下所示,執行計畫走了聚簇索引範圍掃瞄csek
建立組合索引
刪除組合索引,檢視執行計畫
下列情況不走索引
索引列上使用函式
索引列上進行計算
索引列上使用is null和is not null
索引列上做了隱式轉換(經測試,實際上走了索引)
返回結果過多
1 聚集索引建立之後執行計畫都能走索引
2 經測試,除了聚集索引,其他索引如不加hint,執行計畫還是走的全表掃瞄
createindexindex_t5onidx(count);
3 加hint之後,執行計畫雖走了索引,因返回值過多,開銷太大,優化不明顯
檢視索引資訊
select table_name,index_name from dba_indexes where table_name=表名
達夢索引管理
達夢索引管理,全部參照官方文件。索引是與表相關的可選的結構 聚簇索引除外 它能使對應於表的sql語句執行的更快。dm提供了幾種型別的索引。聚集索引 每乙個普通表有且僅有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連...
達夢資料庫和mysql索引引擎 達夢資料庫 索引
1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...
達夢資料庫的索引管理
在關聯式資料庫中,索引是一種單獨的 物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。達夢支援的索引 二級索引,位圖索引,唯一索引,復合索引,函式索引,分割槽索引等。一 建立索引的規則 適合建索引的情況 經常...