【问题标题】:SQL query is too slow (flutter mobile)SQL查询太慢(flutter mobile)
【发布时间】:2021-12-31 06:09:04
【问题描述】:

我不确定以下查询有什么问题。

对于提供的names 数组的大小/长度更大,查询似乎运行得很慢(可能呈指数级缓慢,不确定):

这是mytable 的列:

name, timestamp, diff, diff2, ratio, minus_one

minus_one 列只是一个辅助列,对于每个插入的行,它的值始终为 -1

有人可以帮助优化查询吗?或者你认为这很好吗?也许应该优化我的代码的其他部分以更快地运行它? 非常感谢任何建议。

查询:

SELECT 
    COUNT(diff) AS count, 
    IFNULL(AVG(diff), 0) AS avg, 
    IFNULL(MAX(diff), 0) AS max, 
    IFNULL(MIN(diff), 0) AS min 
FROM 
    mytable 
WHERE 
    name IN :names 
    AND timestamp >= :start 
    AND timestamp <= :end 
    AND ratio <> -1 
    AND (minus_one = :ratioStart OR ratio >= :ratioStart) 
    AND (minus_one = :ratioEnd OR ratio <= :ratioEnd) 
    AND (minus_one = :diffStart OR diff >= :diffStart)
    AND (minus_one = :diffEnd OR diff <= :diffEnd) 
    AND (minus_one = :diffStart2 OR diff2 >= :diffStart2) 
    AND (minus_one = :diffEnd2 OR diff2 <= :diffEnd2) 
GROUP BY 
    name 
ORDER BY 
    count DESC

【问题讨论】:

    标签: sql flutter performance sqlite drift


    【解决方案1】:

    那是因为 where 子句的查询时间比较长。 您可以通过执行以下操作之一来改进查询:

    1. 使用多列索引:

      CREATE INDEX index_name ON table(col1, col2);
      
    2. 使用sqflite插件

    【讨论】:

    • 感谢索引解决了我的问题。它现在工作得更快了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2013-07-10
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2021-06-19
    相关资源
    最近更新 更多