2014-12-19 4 views
4

У меня есть база данных SQLite, которая содержит несколько таблиц. Мы пишем инструмент обслуживания, который удаляет «устаревшие» данные из таблицы, пока размер этой таблицы не будет определенным процентом от общего файла базы данных или меньше.Запрос, который возвращает размер таблицы в базе данных SQLite

Я знаю, как определить размер файла базы данных - я это сделать, выполнив

PRAGMA PAGE_SIZE; 

и

PRAGMA PAGE_COUNT; 

в двух отдельных запросов и умножив два, чтобы получить размер файла в байтах. Да, я знаю, что могу просто взять размер файла в байтах, но это похоже на то, как я это сделал в других базах данных, и я хочу придерживаться его, по крайней мере, на данный момент.

Моя проблема: я не знаю, как получить размер таблицы. Должен быть какой-то способ сделать это. Может кто-то указать мне верное направление?

+2

Я не знаю запроса, но ознакомьтесь с инструментом sql_analize на http://www.sqlite.org/download.html './sqlite3_analyze path_to_db/database.sqlite> dbinfo.sql' предоставит вам подробную информацию по размеру каждого стола на диске. – NotGaeL

+0

(и если он предназначен для очистки, не забудьте «VACUUM;» после того, как вы закончите удаление записей) – NotGaeL

+0

Спасибо за это напоминание –

ответ

0

Нет простого способа запросить размер таблицы. Так что я закончил делать, придумывает оценку размера таблицы, умножая количество строк на оценку размера строки. Я вручную суммировал длину целочисленных столбцов (по 4 байта каждый) плюс сумму длины длинных столбцов (по 8 байт), а также оценку средней длины столбцов строки с использованием запроса. Что-то вроде этого:

SELECT COUNT(*) * -- The number of rows in the table 
    (24 +  -- The length of all 4 byte int columns 
     12 +  -- The length of all 8 byte int columns 
     128)  -- The estimate of the average length of all string columns 
FROM MyTable 

Единственной проблема с этим является то, что:

  • Это завышает размер любой строки с целым числом или длинным столбцом, который может быть пустым, и что происходит с нулевым
  • Он будет переоценивать или недооценивать длину столбцов строки.
  • Он не учитывает размер индексов.

Это было достаточно для нашей реализации. Возможно, вам удастся лучше вычислить размер таблицы с более сложным запросом, который принимает значения & фактической длины столбцов строки.

+0

Как это должно работать? Я всегда получаю только столбцы, умноженные на 164 (tha is 24 + 12 + 128). – rubo77

+0

Функция COUNT (*) возвращает количество строк, соответствующих критериям. Остальные числа действительно являются постоянными, равными 164. Он не вернет фактический размер строк, просто оценка того, сколько места занято таблицей. –

+0

Не можете ли вы выбрать поле «Типы», чтобы вы могли сделать функцию повторного использования? – rubo77

Смежные вопросы