问题 如何提高Android的SQLite数据库的性能


有关stackoverflow的这个主题的问题很少,但我没有得到正确的答案。我对平面文件的性能有一些疑问,使用平面文件而不是SQLite更好吗?

我获取了Android的性能统计数据 SQLite

我有一个表有21列的性能统计信息

任何人都可以建议如何减少插入时间。

Records  Write time in ms   Read time in ms
1000      67813                   608
1000      66340                   604
1000      64359                   609
10000     679837                  5159
10000     618062                  5110
10000     644638                  5729
10000     646878                  5890

Flat file 没有时间而不是 SQLite

所以有人请建议我如何为SQLite改善这段时间。

我用的很简单 database open insert using ContentValues 和数据库关闭。

请告诉我一些如何改进这些统计数据的方法。

使用下面的答案后更新了性能统计数据。我想提高这些性能。

Records    Writetime in ms         Readtime in ms   
1000        1645                       530          
1000        2497                       672          
1000        3143                       610          
10000       16356                     5243          
10000       14006                     5122          
10000       13158                     5002          
10000       14828                     5234          
100000      125525                    77622 

谢谢


8579
2017-10-09 08:40


起源

如果要优化插入时间,则应发布插入代码。 - keyser
平面文件和SQLite有不同的目标,一个是存储与批量检索,SQLite用于快速检索(在大多数情况下比文本文件更快) - dvhh
使用事务进行大插入 - njzk2
此外,平面文件很好,但只有你不需要进行查询 - njzk2
@ njzk2你赞同我的观点。平面文件只适合读写。 - sam_k


答案:


我相信你使用循环插入1000或10000。 使用TRANSACTIONS,它将大大减少写入时间。我已经遇到过这样的问题,它将我的写入时间从大约30秒减少到大约不到1秒。

看一眼 这个

基本上,你应该做的是:

db.beginTransaction();
try{
    for(int i = 0 ; i < LENGTH ; i++ ) {
        // execute SQL
    }
    db.setTransactionSuccessful(); // marks a commit
    }
finally{
    db.endTransaction();
}

15
2017-10-09 08:54



哦真的非常感谢让我试试 - sam_k
我必须在这里使用插入查询? - sam_k
在这里,我需要在我的代码中打开数据库并关闭数据库? - sam_k
非常感谢它真正改善了我的统计数据。您可以建议我如何使用其他方式减少阅读时间。? - sam_k
在for循环中执行insert查询。是的,你当然应该打开和关闭数据库。但是关于阅读时间,我不知道如何减少它,希望我帮助。 - Leeeeeeelo