Я провожу некоторые тесты производительности для индексов и 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