2010-08-07 48 views
1

我正在運行一些關於索引和DML的性能測試。當你不使用索引表上的索引時,我無法理解一些測試結果DML的執行速度比非索引錶慢。我期待在相似的時間間隔內運行這兩者。 我使用的plsql塊如下:(TINDEX_PERFORMANCE_TEST_1表有一個主鍵列「ID」,我沒有在更新語句中使用它,以便在更新時使用下面的語句在索引上不需要更新。 )當您不使用索引時索引表DML性能

那麼,爲什麼索引表執行速度較慢時,索引不使用?感謝所有...

$BEGIN 

    RUNSTATS_PKG.RS_START; 

    FOR i IN 1..10000 
    LOOP 

     --INSERT INTO TINDEX_PERFORMANCE_TEST_1 VALUES(i,i); 

     UPDATE TINDEX_PERFORMANCE_TEST_1 
     SET vtext = TO_CHAR(i) 
     WHERE vtext = TO_CHAR(i); 

     --DELETE FROM TINDEX_PERFORMANCE_TEST_1 WHERE ID = i; 

    END LOOP; 

    RUNSTATS_PKG.RS_MIDDLE; 

    FOR i IN 1..10000 
    LOOP 

     -- INTO TINDEX_PERFORMANCE_TEST_2 VALUES(i,i); 

     UPDATE TINDEX_PERFORMANCE_TEST_2 
     SET vtext = TO_CHAR(i) 
     WHERE vtext = TO_CHAR(i); 

     --DELETE FROM TINDEX_PERFORMANCE_TEST_2 WHERE ID = i; 

    END LOOP; 

    RUNSTATS_PKG.RS_STOP; 
END; 

結果:

Run1 ran in 165 hsecs 
Run2 ran in 93 hsecs 
run 1 ran in 177,42% of the time 
+0

大部分出於好奇,你是否嘗試在反轉的表中運行相同的代碼(即沒有索引的表首先運行)? – Allan 2010-08-09 04:01:02

回答

3

本來是任何東西(如其它作業佔用的CPU,磁盤執行其他操作,內存管理)。

當你進入十分之一秒時,經過的時間是相當可變的。