Qt提升对SQLite数据库的读写速度

在对数据库操作时,提升数据库的速率是很重要的,要不然数据量太大的话,只是操作数据库就会增加时间成本,因此,提升速率势在必行。
1.问:SQLite数据库是什么?
答:SQLite是一款轻型的数据库,他设计的目标是为了嵌入式,由于占用空间非常低,因此大量的应用于嵌入式设备中。
更直白的来说,SQLite数据库是一个存在于我们某个磁盘的文件,普通的使用,我们是在不断地打开文件–>文件操作–>关闭文件的循环中浪费时间,
如果有1千万条数据等待插入数据库,那么我们这样的操作会花好长时间,因此我们需要寻找一种方法提升读写速度。

假设:既然数据库是一个文件,那么我们为什么不能打开数据库后一次性将数据全部插入进去再关闭数据库呢?

而Qt提供的事物处理函数正好解决了这种难题,具体看下面代码

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QTime>
#include <QDebug>
void MainWindow::on_pushButton_clicked()
{
    QSqlDatabase  m_pDB = QSqlDatabase::addDatabase("QSQLITE", "connSQLite");
    m_pDB.setDatabaseName("myTest.db3");
    m_pDB.open();
    QSqlQuery   query("", m_pDB);
    QTime   tmpTime;
    QString sql = "create table T_test("
    "id int(4),"
    "name   varchar(20)"
    ")";
    bool nRet = query.exec(sql);
    if( nRet )
    {
        qDebug()<<"create table success";
    }
    // 开始启动事务
    m_pDB.transaction();
    tmpTime.start();
    for(int i = 0; i<100000; i++)
    {
       bsuccess = query.exec("insert into T_test(id,name) values(2,'zhang')");
    }
    // 提交事务,这个时候才是真正打开文件执行SQL语句的时候
    m_pDB.commit();
    qDebug()<<"10000条数据耗时:"<<tmpTime.elapsed()<<"ms"<<endl;

    QTime   testTime;
    tmpTime.start();
    for(int i = 0; i<1000; i++)
    {
       bsuccess = query.exec("insert into T_test(id,name) values(3,'wang')");
    }
    qDebug()<<"1000条数据耗时:"<<testTime.elapsed()<<"ms"<<endl;
}

100000条数据耗时: 1382 ms —–>这是使用事物处理函数插入100000条数据所耗的时间
1000条数据耗时: 4447 ms —–>这是未使用事物处理函数插入1000条数据所耗的时间

对比一下,提升速度不是一般的高

查找数据的时候可以使用联合查询
select T_FileNext.* from T_FileNext where not exists(select * from T_FileLast where T_FileNext.FileName=T_FileLast.FileName and T_FileNext.FilePath=T_FileLast.FilePath)
使用这条SQL语句,当两张表里面有同样的4万条数据时,如果使用普通的查找所花费的时间大约是20min,而当使用联合查找是大概需要几十秒到一分钟时间

CREATE INDEX index_name ON table_name (FileName,FilePath)

当然两张表都要创建联合索引,具体的可以百度一下用法

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值