SQLITE - 具有5,000,000个TINYINT值的文件?

use*_*424 2 sqlite

我想创建一个包含5,000,000个tinyint值(0到256之间)的SQLITE文件.根据我的计算,这个文件应该使用大约5 [MB].

然而,我得到的文件大小接近50 [MB].

这是我使用的代码:

import sqlite3
# Create and populate a database
db = sqlite3.connect('/home/mine/temp.db')
db.execute("CREATE TABLE IF NOT EXISTS test(id INT2)")
for i in range(0, 5000000):
     db.execute("INSERT INTO test(id) VALUES({0})".format(0))
db.commit()
db.close()
Run Code Online (Sandbox Code Playgroud)

任何想法如何优化事物,以便占用更少的空间?

Mik*_*ll' 6

对于一个数据库来说,还有更多的东西,而不仅仅是500万个小额的空间.SQLite已发布其文件格式的详细信息.它似乎说你每行至少需要9个字节.

SQLite使用B-Tree结构的两个不同变体:

  • 表B-Tree,使用64位整数值作为键.在表B-Tree中,关联的数据库记录(第2.3.2节)与每个条目一起存储.表B-Tree结构在2.3.4节中详细描述.
  • 索引B-Tree,它使用数据库记录作为键.索引B树结构在2.3.3节中有详细描述.