Манипулирование данными большого объема
Рекомендации относятся к случаю интенсивного манипулирования данными (операции INSERT
, UPDATE
, DELETE
).
Если транзакция выполняет массовое обновление записей некоторой таблицы и скорость такой операции значительно более медленная, чем ожидается, то рекомендуется заблокировать на время выполнения этой операции обновляемую таблицу (LOCK TABLE) и разблокировать ее по окончании операции (UNLOCK TABLE). Это исключает блокировки на уровне записей и тем самым значительно повышает скорость выполнения операции.
Рекомендации зависят от возможности размещения таблиц c большим объемом данных в пуле ядра СУБД:
-
если выполняются SQL-запросы типа
INSERT
,SELECT
,UPDATE
,DELETE
с условиями, отличными от условий вида rowid=1, желательно загрузить таблицы в пул ядра СУБД. Для этого для каждой используемой в SQL-запросе таблицы необходимо выполнить SQL-команду:TEST TABLE < имя таблицы > PRELOAD;
После этой команды данные и индексы таблицы будут загружены в оперативную память, и фрагментация индекса не будет иметь значения.
-
при отсутствии возможности загрузить таблицу в пул ядра СУБД рекомендуется периодически пересоздавать условия ссылочной целостности, выполняя SQL-запросы:
DROP INDEX < имя индекса >; CREATE INDEX < имя индекса > ON < имя таблицы > INDEXFILE < номер файла индекса >;
Регулярная перестройка индексов устраняет дефрагментацию индексного файла и повышает производительность обработки индексированных данных.
Примечание
Предварительная загрузка таблицы в оперативную память не сильно влияет на выполнение простых запросов вида:
insert into table1 values(10); delete from test1 where rowid=1;