Oracle 數據生成 索引

1.建表

CREATE TABLE qq(
       qq_num integer
);

2.插入數據

插入數據的方法有很多種,但是要插入3億數據,必須要有高效的算法。在插入數據時我用了最笨的辦法,採用PL/SQL利用流程控制的LOOP語句插入。同時我也看了網上的插入效率的優化,怎樣利用較少的時間生成較多的測試數據。給我印象深刻的是利用種子表來生成較多的數據。

這樣做的好處是本身數據就在本地磁盤,減少了存取的I/O操作,數據生成較快。

我採用最笨的辦法利用8小時生成了2億多條數據記錄。

3.索引的建立

由於已存在的記錄有2億條,採用CREATE INDEX qq_num_index ON qq(qq_num);耗費時間近1小時。

索引的好處:查詢效率提高,索引相關的“填充因子”。

count()函數始終不走索引,都是全盤掃描,還未找到解決辦法。也就是以下PL/SQL執行的時間在建立索引前後是一樣的。

但是建立索引後,SELECT MAX(qq_num) 和其他相關的語句的執行時間立即減少了很多。

以下是代碼:

建立索引前:執行時間爲1分7秒,索引後0.2秒內完成。

建立索引是以存儲空間爲代價換取時間效率的提高。

 

這當中有autotrace可以自動顯示SQL語句的執行計劃,這種查看必須在SQL *PLUS下.

開啓autotrace的步驟如下:

--DBA初次必須執行

CREATE ROLE plustrace;--需要擁有權限
GRANT SELECT ON v_$sesstat TO plustrace;--需要有GRANT權限
GRANT SELECT ON v_$mystat TO plustrace;
GRANT SELECT ON v_$statname TO plustrace;

--開啓自動跟蹤

SET AUTOTRACE ON;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章