如何加快数据访问速度?

Posted

技术标签:

【中文标题】如何加快数据访问速度?【英文标题】:How to speed up data access? 【发布时间】:2017-01-03 11:20:34 【问题描述】:

我有一个包含大约 2200 万条记录的 sqlite 数据库。我在右列上有索引(在“where”列上)当我使用 sqlitetudio(一个 sqlite 编辑器)进行查询(返回大约 80 000 行)时,查询大约需要一秒钟才能运行。但我怀疑这是由于某种形式的分页造成的。

但是.. 当我使用 system.sqlite.data 在 C# 中运行相同的查询时,需要很长时间才能遍历这 80 000 条记录。

有什么方法可以加快速度吗?我是否应该在 sqlite.dll 本身上编写一个包装器?

我在 sqlitestudio 和 c# 代码中检查了执行计划及其相同。 Similar issue

虽然猜测的答案很受欢迎,并且可以提供见解(有时是答案),但我希望得到具体的答案(即您知道实际有效的答案)

这是代码...

using (var command = new SQLiteCommand(conn))

    command.CommandText = "select cell, lat, lon from cell_towers where mcc = @mcc and net = @net ";
    command.Parameters.AddWithValue("@mcc", MCC);
    command.Parameters.AddWithValue("@net", MNC);
    using (SQLiteDataReader rdr = command.ExecuteReader())
    
        // In here it takes around 1-2 minutes to loop through. Even with no code inside the loop
        while (rdr.Read())
        

        
    
   

编辑 1:

我使用 sqlite3.exe(可以从 sqlite.org 下载的命令行程序)运行了相同的查询,它的输出将进入控制台窗口。循环所有记录并将其打印到命令窗口需要很长时间.. 但请记住...它正在打印到命令窗口....

【问题讨论】:

不知道,不是我 - 但是..每个循环需要 1-2 分钟?这看起来确实慢得令人难以置信,如果(因为想要更好的事情做)当你隐藏了它在循环中所做的事情时会发生什么,你只需从你的阅读器中获取数据并将原始对象写入本地磁盘......所以什么都没有优化出来了,还需要那么长时间吗? 这是循环整个结果集所需的时间,即使循环中没有任何内容。那就是让我发疯的部分。但即使使用(从列中简单地分配类属性)中的代码,它仍然需要很长时间。您认为结果列上的索引可能会有所帮助吗? 对我的代码注释稍作改动 这取决于,所以.. 假设需要 2 分钟,sql lite 服务器是本地的吗?你能监控它,看看发生了什么,主要的磁盘 io 吗? cpu负载?如果您使用其他任何东西连接,返回相同的速度是否一样慢?那张表上到底有什么索引? 它在我的本地机器上。索引位于 mcc 和 net 列(where 子句中的那些) 对监控说明的好思考。我去看看 【参考方案1】:

仅仅为每一列建立索引并不总是有用的。查找两列需要两列都有一个索引:

CREATE INDEX cell_towers_mcc_net ON cell_towers(mcc, net);

此查询的covering index 可能会更快一点:

CREATE INDEX cell_towers_mcc_net_cov ON cell_towers(mcc, net, cell, lat, lon);

但可能需要比其价值更多的存储空间。

如果mcc/net 列是主键,请考虑改用clustered index。

【讨论】:

感谢您的回答。我只是想知道这个。我在这些列(mcc,net)上有索引,我只是使用 sqlite3.exe 将数据导出到 csv。大约需要 20 秒。这比我必须等待的一分钟或两分钟要快得多。所以我考虑把东西转储到文件然后用 StreamReader 从那里读取它

以上是关于如何加快数据访问速度?的主要内容,如果未能解决你的问题,请参考以下文章

使用Gzip压缩数据,加快页面访问速度

如何配置Memcached高速缓存,加快wordpress的速度

转国内用户如何加快App Store的访问速度

使用Redis加快单词的检索速度

使用 DNSPOD 和腾讯云 CDN 加快网站访问速度的教程

使用Openresty加快网页速度