Быстрая загрузка данных в Sqlite - 2
В предыдущем посте на эту тему я не упомянул про важный фактор, который сильно влияет на производительность, - это наличие у таблицы индекса. Индекс способен довольно существенно замедлить процедуру вставки, поэтому лучше если данные будут загружаться в таблицу без индексов. Но иногда, индекс необходим. Например, если мы хотим загрузить в таблицу только отсутствующие данные, то это делается с пом. SQL-конструкции REPLACE:
REPLACE INTO Table1 (FieldA) VALUES (:v) |
При этом, использование REPLACE в примере выше предполагает, что построен уникальный индекс для поля FieldA.
Для того, чтобы загрузка в таблицу с индексом осуществлялась максимально быстро, необходимо, чтобы загружаемые данные были отсортированы по этому индексу.
Это нужно для того, чтобы минимизировать количество операций обращения к диску при поиске значения в индексе. Когда значения в индексе располагаются рядом, то эффективно работает буфер чтения. Выигрыш в скорости при вставке отсортированных данных по сравнению со вставкой неупорядоченных данных на больших объемах может оказаться в десятки раз.
===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru