Если вы работаете в linux или OSX или иным образом имеете доступ к утилитам unix awk (и, возможно, sort), вы можете сделать следующее, чтобы получить количество и приблизительный размер с помощью анализа дампа:
# substitute '.dump' for '.dump mytable' if you want to limit to specific table
sqlite3 db.sqlite3 '.dump' | awk -f sqlite3_size.awk | sort -k3 -n -r
который возвращает:
table count est. size
my_biggest_table 1090 60733958
my_table2 26919 7796902
my_table3 10390 2732068
и использует скрипт awk:
/INSERT INTO/ { # parse INSERT commands
split($0, name, "\""); # extract "xxx" from INSERT INTO "xxx"
split($0, values, "VALUES"); # extract everything after VALUES
gsub(/[\047,]/, "", values[2]); # remove single-quotes and commas
sizes[name[2]] += length(values[2]) - 3; # subtract 3 for parens and semicolon
counts[name[2]] += 1;
}
END {
print "table\tcount\test. size"
for(k in sizes) {
# print and sort in descending order
print k "\t" counts[k] "\t" sizes[k] | "sort -k3 -n -r";
}
}
Предполагаемый размер основан на длине строки команды «INSERT INTO» и поэтому не равенфактический размер на диске, но для меня подсчет плюс предполагаемый размер более полезен, чем другие альтернативы, такие как подсчет страниц.