我有一个SQLite数据库,它包含了许多表,我们正在编写一个维护工具,它将从表中删除“过时”的数据,直到该表的大小达到数据库文件总量的一定百分比或更小。
我知道如何确定数据库文件的大小--我通过执行
PRAGMA PAGE_SIZE;
以及
PRAGMA PAGE_COUNT;
在两个独立的查询中,然后将两者相乘,得到文件的字节大小,是的,我知道我可以只取文件的字节大小,但这与我在其他数据库中的做法相似,我想坚持使用它,至少现在是这样。
我的问题是我不知道如何得到一张table的大小。一定有什么方法可以做到这一点。谁能给我指出正确的方向?
4条答案
按热度按时间vom3gejh1#
如果SQLite是用
SQLITE_ENABLE_DBSTAT_VTAB
编译的,你可以查询dbstat
表,这应该返回表TABLENAME
的表大小(字节):https://www.sqlite.org/dbstat.html
这是sqlite3_anazlyer CLI工具使用的内容,该工具也可用于此目的。
niwlg2el2#
你可以使用
sqlite3_analyzer
tool来完成这个任务,它可以是downloaded here,只要在你的数据库上运行它,它就会吐出很多有趣的统计数据,而且这些数据也可以通过管道直接传输到另一个SQLite数据库中:xhv8bpkk3#
查询表的大小并不容易,所以我最后做的是通过将行数乘以行大小的估计值来得出表大小的估计值。我手动计算了整数列的长度(每个4字节),加上长列的长度总和(每个8字节),加上使用查询的字符串列的平均长度估计值。
唯一的问题是:
这对于我们的实现来说已经足够好了,你也许可以用一个更复杂的查询来计算表的大小,这个查询考虑了空值和字符串列的实际长度。
z9zf31ra4#
试试这个: