如何找出sqlite数据库中记录(BLOB)使用的物理空间量?

时间:2013-12-05 20:48:35

标签: sql sqlite

我正在使用Ditto作为我的剪贴板历史记录管理器,数据库现在大约是5.5 gig。这可能太大了; o)删除了一堆截图并对数据库进行了紧凑和修复后,它仍然太大了。

我正在查看下面的表格定义中的主数据表。

CREATE TABLE Data(lID INTEGER PRIMARY KEY AUTOINCREMENT, lParentID INTEGER, strClipBoardFormat TEXT, ooData BLOB)

在sqlite(版本3.7.13)中有一种方法可以找出记录使用了多少空间,这样我就可以删除/它们了吗?

1 个答案:

答案 0 :(得分:3)

length(ooData)应该做到这一点。

来自documentation

  

length(X):对于字符串值X,长度(X)函数返回   第一个NUL之前的X中的字符数(不是字节数)   字符。由于SQLite字符串通常不包含NUL   字符,长度(X)函数通常会返回总数   字符串X中的字符数。对于blob值X,长度(X)   返回blob中的字节数。如果X为NULL则为长度(X)   一片空白。如果X是数字,则length(X)返回字符串的长度   代表X。

所以你的查询看起来像这样,我相信:

SELECT id_field, length(blobData) AS size, blobdata FROM your_table 
WHERE blobData IS NOT NULL

由于您只对数据库中的“最大”文件感兴趣,您可能只想选择最大的文件,因此您需要添加这样的约束

AND size > 1000000;