- PVSM.RU - https://www.pvsm.ru -
В данном посте описаны внутренние таблицы SQLite: их строение и назначение.
Первая страница файла базы данных – это корневая страница «table B – tree», содержащая специальную таблицу «sqlite_master» (либо «sqlite_temp_master» для временной базы данных). Структура таблицы описана в таблице 1.
Нормализация поля SQL означает, что запрос соответствует следующим свойствам:
В данной таблице одна строка – это один объект базы данных. В дополнение к пользовательским объектам в «sqlite_master» хранятся и внутренние объекты базы, за исключением самой таблицы «sqlite_master». Имена внутренних объектов базы начинаются с «sqlite_», соответственно база запрещает пользователю создавать объекты, имена которых начинаются с «sqlite_».
Внутренняя таблица, необходимая для реализации AUTOINCREMENT. Для каждой пользовательской таблицы использующей инкремент, соответствует строка таблицы «sqlite_sequence».
Схема таблицы:
CREATE TABLE sqlite_sequence (name, seq);
Пользователь может добавлять, изменять и удалять строки из таблицы «sqlite_sequence», но не может удалять саму таблицу.
Внутренняя таблица, создается с помощью команды ANALYZE. Используется для хранения справочной информации о таблицах и индексах, которой может воспользоваться планировщик для поиска эффективного способа выполнения запросов.
Схема таблицы:
СREATE TABLE sqlite_stat1 (tbl, idx, stat)
Поле stat после последовательности чисел, может содержать ключевое слово UNORDERED (отделенное от последнего числа пробелом). Если данное ключевое слово присутствует, то планировщик не использует индекс для сортировки или диапазонного запроса.
Если столбец idx равен NULL, то поле stat содержит число строк в указанной таблице.
Устаревшая внутренняя таблица для версий SQLite 3.6.18 – 3.7.8. Содержала дополнительную информацию о распределении ключей.
Внутренняя таблица для версий SQLite 3.7.9 и выше. Используется, если база собрана с параметром SQLITE_ENABLE_STAT3 или SQLITE_ENABLE_STAT4. Содержит дополнительную информацию о распределении ключей в пределах индекса.
Схема таблицы:
CREATE TABLE sqlite_stat3 (tbl, idx, nEq, nLt, nDLt, sample)
Внутренняя таблица для версий SQLite 3.8.1 и выше. Используется, если база собрана с параметром SQLITE_ENABLE_STAT4. Содержит дополнительную информацию о распределении ключей в пределах индекса.
Схема таблицы:
CREATE TABLE sqlite_stat4 (tbl, idx, nEq, nLt, nDLt, sample);
sqlite_stat4 является обобщением таблицы sqlite_stat3. В таблице sqlite_stat3 предоставляется информация о крайнем левом столбце индекса, тогда как таблица sqlite_stat4 предоставляет информацию обо всех столбцах индекса.
Формат записи (RF) определяет последовательность значений, соответствующих столбцов в таблице или индексе. RF определяет количество столбцов, тип данных каждого столбца и содержание каждого столбца. Для записи используется VARINT (целое переменной длинны, 1-9 байт в длину, метод статического кодирования Хаффмана). Заголовок RF начинается с одного VARINT, который определяет общее число байт в заголовке (включая сам VARINT). Затем следует несколько VARINT (по одному на каждый столбец таблицы/индекса). Эти дополнительные числа называются Serial Type значения которых указаны в таблице 2.
Допустим, имеется база данных:
CREATE TABLE test (a, b, c);
CREATE INDEX ind ON test(«a»,«b»,«c»)
Данные таблицы test:
После выполнения команды ANALYZE, поле stat для данной таблицы будет выглядеть (8 3 2 1):
Автор: rpsv
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sqlite/60245
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/223451/
Нажмите здесь для печати.