как sqlite хранит свой контент - PullRequest
1 голос
/ 29 марта 2011

Из того, что я Google, sqlite не поддерживает кластерные индексы (см. Четыре: кластерные индексы ), но я не понимаю:

Это означает, что если ваш индекс последовательный INTEGER, записи физически выложены в базе данных в порядок INTEGERs: 1, затем 2, затем 3.

  1. Если некоторые записи удаляются из таблицы, содержащей последовательный индекс int, где будут размещаться записи новой вставки? Из того, что я знаю, записи int ID будут только расти, поэтому записи будут добавлены в tail, верно? Означает ли это, что удаленные места теряются?
  2. В случае отсутствия последовательного индекса INTEGER, является ли таблица sqlite таблицей кучи? то есть запись будет размещена там, где впервые будет найдено свободное место.

1 Ответ

0 голосов
/ 29 марта 2011

1) Правильно, записи будут происходить с хвостом. Да, удаленные места могут быть потрачены впустую, если ядро ​​базы данных не может легко их повторно использовать. Неиспользуемые места будут удалены при сжатии базы данных с помощью команды VACUUM .

2) Да, такая таблица SQL является таблицей кучи. Но индексы (любого рода) точно созданы для доступа к данным, как если бы записи были отсортированы. Индексы - это отсортированные значения, связанные с записями. Но новые записи не обязательно размещаются там, где впервые найдено свободное место. Они размещаются там, где ядро ​​базы данных заполнено, чтобы разместить их с учетом неиспользуемого пространства и времени для записи двоичных данных (происходить в очереди быстрее, чем вставлять в середину).

...