我正在使用SQlite来存储大量数据,并且使用非常简单的查询很难解压缩数据。目前,我的数据库只是一个表,大约有5000万行和15列。我想从这个表中提取一个完整的列。
我尝试过使用RSQlite:dbGetQuery(db, ‘select qs from CSI’)
其中qs
和CSI
分别是我的列名和表名。 Qs是字符串。这个查询在我放弃之前运行了几个小时(R版本3.3.3,RSQLite_1.1-2)。
我也尝试过SQLite的数据库浏览器(v3.9.1),使用相同的查询,并在运行几个小时后再次放弃。我没有IDKey /索引,但我想我想要整个列,这不应该有任何影响。
我正在使用16GB Ram的64位Windows机器上运行。如何在合理的时间内从表中提取列?或者,我是否有更好的方式存储数据以便于访问?
答案 0 :(得分:2)
要获取列值,SQLite必须读取该列的行。因此,要从所有行获取值,它必须实际读取所有内容。
使用此列的索引,您将拥有一个covering index,可以减少从磁盘读取的数据量。
如果您实际上不需要来自同一行的多个值,请考虑将列存储在不同的表中,或使用不同的数据库。