SQLiteDataReader,最后一次Read()需要10秒

时间:2013-09-17 06:06:59

标签: c# sqlite

我有一个大约有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移出循环

1 个答案:

答案 0 :(得分:1)

SQLite即时计算结果记录。

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

索引会使查找更快 (使用EXPLAIN QUERY PLAN检查是否使用了某个索引。)