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;