【发布时间】:2011-03-26 16:34:56
【问题描述】:
我正在运行一些关于索引和 DML 的性能测试。当您不在索引表上使用索引时,我无法理解某些测试结果,DML 的执行速度比非索引表慢。我期望以相似的时间间隔运行两者。 我使用的plsql块如下:(TINDEX_PERFORMANCE_TEST_1表有一个主键列'ID',我没有在更新语句中使用它,以便在我使用下面的语句更新时不需要更新索引。对吗?)
那么为什么索引表在不使用索引的情况下会执行得更慢呢?谢谢大家...
$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
【问题讨论】:
-
主要是出于好奇,您是否尝试过颠倒表运行相同的代码(即先没有索引的表)?
标签: performance oracle indexing