среда, 28 ноября 2012 г.

Быстрая загрузка данных в Sqlite - 2

В предыдущем посте на эту тему я не упомянул про важный фактор, который сильно влияет на производительность, -  это наличие у таблицы индекса. Индекс способен довольно существенно замедлить процедуру вставки, поэтому лучше если данные будут загружаться в таблицу без индексов. Но иногда, индекс необходим. Например, если мы хотим загрузить в таблицу только отсутствующие данные, то это делается с пом. SQL-конструкции REPLACE:

REPLACE INTO Table1 (FieldA) VALUES (:v)

При этом, использование REPLACE в примере выше предполагает, что построен уникальный индекс для поля FieldA.

Для того, чтобы загрузка в таблицу с индексом осуществлялась максимально быстро, необходимо, чтобы загружаемые данные были отсортированы по этому индексу.

Это нужно для того, чтобы минимизировать количество операций обращения к диску при поиске значения в индексе. Когда значения в индексе располагаются рядом, то эффективно работает буфер чтения. Выигрыш в скорости при вставке отсортированных данных по сравнению со вставкой неупорядоченных данных на больших объемах может оказаться в десятки раз.

===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru