SQLite вакуумирование / фрагментация и снижение производительности
Допустим, я периодически вставляю данные в базу данных SQLite, затем удаляю первые 50% данных, но не собираю пылесос.
У меня сейчас есть что-то вроде обнуленных страниц для первых 50% файла? Если я добавлю еще одну порцию данных, заполняю ли я эти обнуленные страницы?
В руководстве упоминается фрагментация данных:
Частые вставки, обновления и удаления могут привести к фрагментации файла базы данных, когда данные для одной таблицы или индекса разбросаны по файлу базы данных.
VACUUM гарантирует, что каждая таблица и индекс хранятся в основном в файле базы данных. В некоторых случаях VACUUM может также уменьшить количество частично заполненных страниц в базе данных, дополнительно уменьшая размер файла базы данных.
Но это не означает, что от этого неизбежно происходит снижение производительности. Это главным образом намекает на потраченное впустую пространство, которое могло быть спасено от очистки.
Есть ли заметный прирост производительности для данных на строго смежных страницах? Могу ли я ожидать "ужасную" производительность от базы данных с большим количеством фрагментированных данных?
1 ответ
SQLite автоматически повторно использует свободные страницы.
Фрагментированные страницы могут привести к снижению производительности, только если
- объем данных настолько велик, что его невозможно кэшировать, и
- ваше запоминающее устройство ищет относительно медленно (например, жесткие диски или дешевые флэш-устройства), и
- Вы получаете доступ к данным достаточно часто, чтобы разница имела значение.
Есть только один способ узнать, так ли это для вашего приложения: измерить его.