SQLite 在数百万行后减速,如何加速?

标签 sqlite scalability

我在 SQLite 中有一个表,它基本上具有以下内容:

id : integer (primary key)
name: text
timestamp: text
data1: integer
data2: integer
...
data6: integer

我需要按名称和时间戳进行过滤,所以我设置了(名称,时间戳)索引。

在 100,000,000 行时,SQLite 在查询时爬行。了解索引将时间复杂度从 O(n) 降低到 O(log n) 但它似乎仍然太慢。我不喜欢将数据分成多个表。有什么建议吗?

最佳答案

您的时间戳应该是数字。由于比较字符串的方式,过滤文本列会显着减慢查询速度。

如果您还没有这样做,请将索引放在已排序 (ORDER BY) 或过滤 (WHEREany 列上, HAVING,JOIN ON 等)。

最后,您过滤数据的顺序可能会有很大的不同。按数字时间戳然后按名称过滤通常比按名称然后按数字时间戳过滤要快得多。尝试改变你的表达顺序。例如,WHERE day = ?, month = ?, year = ? 通常比 WHERE year = ?, month = ?, day = ? 快得多。

关于SQLite 在数百万行后减速,如何加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748489/

相关文章:

docker - 在同一台服务器上扩展虚拟机/容器有什么意义?

c++ - 在应用程序更新时更新部分数据库

java - Solaris 上 Java/C++ 的高可用性和可扩展平台

sql - 数据库分片和分区的资源

sqlite - 线程 "main"java.lang.NoClassDefFoundError : org/sqlite/NativeDB 中的异常

java - 我应该为我的业务层使用 EJB3 还是 Spring?

ruby-on-rails - 如何使用 Rails 进行扩展

ios - 选择所有如果 blah.. 否则选择所有 blah

android - 将唯一列添加到已存在的 sqlite 表

sqlite 多个唯一性不起作用