检查Sqlite中单行占用了多少空间

问题描述 投票:0回答:2

有没有办法检查Sqlite中单行占用了多少空间?

我尝试过使用这种方式:

我的表中有 4 个字段:

id(int)
name(text)
pat(text)
is_default(bool) 

 select *, sum(length(id)+length(name)+length(pat)+length(is_default)) 
    from color;

但它返回字符长度(例如:43)。如何确定行长度(以字节为单位)?

android sqlite
2个回答
5
投票

SQLite 本身不会为您提供此信息,但

sqlite-analyzer
工具 可以。

如果您想从应用程序执行此操作,则必须读取所有记录值,并从中推断出磁盘记录格式中使用了多少字节。


0
投票

正如这个答案中所暗示的,确定单行占用的确切空间是不可能的,因为——除其他原因外——一行可能不是页面大小的倍数,页面大小是数据库的主要空间单位文件。

最好的方法是计算每一行的近似大小,然后将它们相加。 sqlite3_analyzer 是一个可行的选项,但是如果您需要

DML
语句中的行大小怎么办?下面重点讨论后者。

SQLite 数据存储因其动态类型系统而变得复杂,除非在表上使用

STRICT
。然后需要考虑
TEXT
编码,该编码在 v3.43.2 中通过
octet_length()
解决,给出了其精确的二进制大小。
length(BLOB)
已经这样做了
BLOB
s。然后,
INTEGER
的大小可变,在某些情况下甚至是
REAL
。那么有没有PK和看不见的
ROWID
柱的问题。是否应该将索引视为表的一部分?然后你就拥有了所有元数据

所有这些方面都可以汇总到一个

GENERATE ALWAYS ... VIRTUAL
列中,以便通过简单的
SELECT size FROM table;
查询提供快速有效的行大小估计。

我鼓励人们提出有关如何改进这些估计的见解。

© www.soinside.com 2019 - 2024. All rights reserved.