我正在研究一种分析应用程序,该应用程序可处理多达10,000,000个条目的数据集。我只是在初始导入期间写入此数据库,而不是之后。现在这个数据集存储在SQLite中 - 主要是出于速度原因。
不幸的是,我发现速度令人失望,主要是因为SQLite无法使用像
这样的索引查询SELECT * FROM tbl WHERE time > 0.1 AND time < 1.1
它将仅使用第一个表达式的索引(时间> 0.1),并对第二个表达式(时间&lt; 1.1)执行全表扫描。典型的操作最多只需要100行,但平均而言,我正在阅读数据库的一半。
在SQLite中有“双范围”索引吗?
注意:切换到另一个DBMS是一个可接受的解决方案,只要它至少同样快,嵌入并且支持.NET。
更新 我错了,如果他们“夹住”一系列数据,实际上会使用索引。不幸的是,只使用其中一个索引,因此以下查询不会得到优化:
SELECT *
FROM tbl
WHERE minTime > 0.1 AND minTime < 1.1 AND maxTime > 1.1 AND maxTime < 2.1
答案 0 :(得分:0)
我不确定这对您的速度问题有什么帮助,但您是否考虑过使用'BETWEEN'运算符?机会是使用它时,optomizer对索引的使用会更友好。
SELECT * FROM tbl WHERE time BETWEEN 0.1 AND 1.1
答案 1 :(得分:0)
R *树模块?