Манипулирование данными большого объема

Рекомендации относятся к случаю интенсивного манипулирования данными (операции INSERT, UPDATE, DELETE).

Если транзакция выполняет массовое обновление записей некоторой таблицы и скорость такой операции значительно более медленная, чем ожидается, то рекомендуется заблокировать на время выполнения этой операции обновляемую таблицу (LOCK TABLE) и разблокировать ее по окончании операции (UNLOCK TABLE). Это исключает блокировки на уровне записей и тем самым значительно повышает скорость выполнения операции.

Рекомендации зависят от возможности размещения таблиц c большим объемом данных в пуле ядра СУБД:

  1. если выполняются SQL-запросы типа INSERT, SELECT, UPDATE, DELETE с условиями, отличными от условий вида rowid=1, желательно загрузить таблицы в пул ядра СУБД. Для этого для каждой используемой в SQL-запросе таблицы необходимо выполнить SQL-команду:

    TEST TABLE < имя таблицы > PRELOAD;

    После этой команды данные и индексы таблицы будут загружены в оперативную память, и фрагментация индекса не будет иметь значения.

  2. при отсутствии возможности загрузить таблицу в пул ядра СУБД рекомендуется периодически пересоздавать условия ссылочной целостности, выполняя SQL-запросы:

    DROP INDEX < имя индекса >;
    CREATE INDEX < имя индекса > ON < имя таблицы > INDEXFILE < номер файла индекса >;

    Регулярная перестройка индексов устраняет дефрагментацию индексного файла и повышает производительность обработки индексированных данных.

    Примечание

    Предварительная загрузка таблицы в оперативную память не сильно влияет на выполнение простых запросов вида:

    insert into table1 values(10);
    delete from test1 where rowid=1;