SQLiteDataReader, last Read() takes 10 seconds

本文关键字:takes seconds last Read SQLiteDataReader | 更新日期: 2023-09-27 18:31:36

我有一个包含大约 2000 万行和 3 列的数据库,目前没有索引进行测试。我的选择语句是这样的:

SELECT * 
FROM   database 
WHERE  column COLLATE NOCASE IN ('expr1', 'expr2' .... up to 96 expressions)

command.ExecuteReader()立即返回,我可以立即阅读该系列。但是最后一个不返回行的Read()需要 13 秒,这是为什么..?如何改进..?

using (SQLiteDataReader reader = command.ExecuteReader())
{
    if(reader.HasRows)
    {
        while (reader.Read())
        {
            // READING DB DATA
        }
    }
}

编辑:将HasRows移出循环

SQLiteDataReader, last Read() takes 10 seconds

SQLite动态计算结果记录。

在实际匹配的最后一条记录之后,数据库仍必须检查所有剩余记录的匹配项。

索引将使查找速度更快。
(使用"解释查询计划"检查是否使用了某些索引。