正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了數據庫空間,甚至大大降低查詢性能。索引是提高數據查詢最有效的方法,也是最難全面掌握的技術,因為正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了數據庫空間,甚至大大降低查詢性能。
索引的管理成本
1、存儲索引的磁盤空間
2、執行數據修改操作(INSERT、UPDATE、DELETE)產生的索引維護
3、在數據處理時回需額外的回退空間。
實際數據修改測試:
一個表有字段A、B、C,同時進行插入10000行記錄測試
在沒有建索引時平均完成時間是2.9秒
在對A字段建索引後平均完成時間是6.7秒
在對A字段和B字段建索引後平均完成時間是10.3秒
在對A字段、B字段和C字段都建索引後平均完成時間是11.7秒
從以上測試結果可以明顯看出索引對數據修改產生的影響
索引按存儲方法分類
B*樹索引
B*樹索引是最常用的索引,其存儲結構類似書的索引結構,有分支和葉兩種類型的存儲數據塊,分支塊相當於書的大目錄,葉塊相當於索引到的具體的書頁。一般索引及唯一約束索引都使用B*樹索引。
位圖索引
位圖索引儲存主要用來節省空間,減少ORACLE對數據塊的訪問,它采用位圖偏移方式來與表的行ID號對應,采用位圖索引一般是重復值太多的表字段。位圖索引在實際密集型OLTP(數據事務處理)中用得比較少,因為OLTP會對表進行大量的刪除、修改、新建操作,ORACLE每次進行操作都會對要操作的數據塊加鎖,所以多人操作很容易產生數據塊鎖等待甚至死鎖現象。在OLAP(數據分析處理)中應用位圖有優勢,因為OLAP中大部分是對數據庫的查詢操作,而且一般采用數據倉庫技術,所以大量數據采用位圖索引節省空間比較明顯。
索引按功能分類
唯一索引
唯一索引有兩個作用,一個是數據約束,一個是數據索引,其中數據約束主要用來保證數據的完整性,唯一索引產生的索引記錄中每一條記錄都對應一個唯一的ROWID。