【问题标题】:How many rows can an SQLite table hold before queries become time comsuming在查询变得耗时之前,SQLite 表可以保存多少行
【发布时间】:2010-09-16 05:04:47
【问题描述】:

我正在设置一个简单的 SQLite 数据库来保存传感器读数。表格将如下所示:

sensors  
 - id (pk) 
 - name  
 - description
 - units  

sensor_readings  
 - id (pk)  
 - sensor_id (fk to sensors)  
 - value (actual sensor value stored here)
 - time (date/time the sensor sample was taken)

该应用程序将每月从大约 30 个不同的传感器捕获大约 100,000 个传感器读数,我希望尽可能长时间地将所有传感器读数保存在数据库中。

大多数查询将在表单中

SELECT * FROM sensor_readings WHERE sensor_id = x AND time > y AND time < z

这个查询通常会返回大约 100-1000 个结果。

所以问题是,在上述查询变得过于耗时(在标准 PC 上超过几秒钟)之前,sensor_readings 表可以有多大。

我知道一种解决方法可能是为每个传感器创建一个单独的 sensor_readings 表,但如果没有必要,我想避免这种情况。还有其他方法可以优化此数据库架构吗?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    如果您要在查询中使用time,则值得为其添加索引。这将是我根据您的信息建议的唯一优化。

    每月 100,000 次插入相当于每分钟大约 2.3 次,因此另一个索引不会太繁重,并且会加快您的查询速度。我假设所有 30 个传感器有 100,000 次插入,而不是每个传感器 100,000 次,但即使我弄错了,每分钟 70 次插入应该还是可以的。

    如果性能确实成为问题,您可以选择将旧数据卸载到历史表(例如,sensor_readings_old),并且只对非历史表 (sensor_readings) 执行查询。

    那么你至少在不影响正常查询的情况下拥有了所有可用的数据。如果您真的想获取较旧的数据,您可以这样做,但您会意识到查询可能需要更长的时间。

    【讨论】:

      【解决方案2】:

      您是否正确设置索引?除此之外,阅读http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html,唯一的答案是“你必须自己衡量”——尤其是因为这在很大程度上取决于硬件以及你使用的是内存数据库还是磁盘,等等如果你在事务中包装插入。

      话虽如此,我在几万行之后遇到了明显的延迟,但这绝对没有优化 - 从阅读一点我得到的印象是有些人有 100 的数千行完全没有问题的正确索引等。

      【讨论】:

        【解决方案3】:

        SQLite 现在支持 R-tree 索引 (http://www.sqlite.org/rtree.html),非常适合您打算进行大量时间范围查询。

        汤姆

        【讨论】:

          【解决方案4】:

          我知道我来晚了,但我认为这可能对以后来查看此问题的任何人有所帮助:

          只要 SQLite 一次只为单个应用程序/用户提供服务,它的读取速度就会相对较快。并发和阻塞可能会成为多个用户或应用程序一次访问它的问题,并且更强大的数据库(如 MS SQL Server)往往在高并发环境中工作得更好。

          正如其他人所说,如果您担心读取查询的速度,我肯定会为该表编制索引。对于您的特定情况,我可能会创建一个包含 id 和 time 的索引。

          您可能还需要注意写入速度。插入可能很快,但提交很慢,因此您可能希望在提交之前将许多插入批处理到一个事务中。这在这里讨论:http://www.sqlite.org/faq.html#q19

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-15
            • 1970-01-01
            • 1970-01-01
            • 2011-02-24
            • 2012-03-01
            • 2020-05-24
            • 2021-12-27
            • 2012-12-18
            相关资源
            最近更新 更多