@kuza2000

Есть ли fill factor для sqlite3?

Для MS SQL есть такая штука, как Fill Factor.
Есть ли подобное для sqlite?

У меня есть база данных, в которую только добавляются записи, удаления и обновления нет. Смотрю файл базы данных - в страницах очень много нулей, словно заполняет не полностью. Вообще, так и должно быть, когда fill factor не 100%. Для MS SQL я бы просто сделал Fill Factor = 100%. А для sql lite что-то подобную настройку не найду.

Для sqlite много есть про настройку vacuum. Но, как я понял, она про другое, про упаковку после удаления. А мне нужно, что бы просто листовые страницы B-дерева заполнялись полностью, как у ms sql с fill factor = 100. То есть, максимально плотное заполнение базы данных, когда идет просто построчная вставка.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@kuza2000 Автор вопроса
Разобрался. Fill Factor мне не нужен. Проблема в другом. Новый вопрос тут: Создаю таблицу в sql lite в обычном варианте, и в ...

По Fill Factor и почему не нужен.
В MS SQL по умолчанию Fill Factor = 100%. И используется он только при перестройке индексов и кластеризованных таблиц.

При заполнении он применяться не может, это невозможно. Страница всегда заполняется до конца, потом делится. Делить страницу раньше бессмысленно. Это не выгодно, никогда.

В SQL LITE, судя по всему, такой настройки нет. Скорее всего тоже 100% заполняет страницы при перестройке, но я не проверял.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Но, как я понял, она про другое, про упаковку после удаления. А мне нужно, что бы просто листовые страницы B-дерева заполнялись полностью, как у ms sql с fill factor = 100. То есть, максимально плотное заполнение базы данных, когда идет просто построчная вставка.

Ты напомнил анекдот когда женщина приша к урологу и жалуется что у мужа дескыть "одно яичко ниже другого. Непорядочек.."

Вобщем перфекционизм хорош в меру. Если ты читал об организации индексов на основе B+Tree (практически везде) во всех DBMS, то ты должен был читать о том что среднее заполнение листовых блоков обычно равно 75% от размера блока. Это связано с возможностью оперативно делать insert новых ключей и значений. Если ты, используя какие-то утилиты специально выровнял заполнение блоков - то индес становится медленным для будущих вставок. Каждая вставка продуцирует операцию split (тяжелая операция) и пока не посплитятся все листы - перформанс будет плохой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы