Qt提升对SQLite数据库的读写速度
2017-01-04 17:04
295 查看
在对数据库操作时,提升数据库的速率是很重要的,要不然数据量太大的话,只是操作数据库就会增加时间成本,因此,提升速率势在必行。
1.问:SQLite数据库是什么?
答:SQLite是一款轻型的数据库,他设计的目标是为了嵌入式,由于占用空间非常低,因此大量的应用于嵌入式设备中。
更直白的来说,SQLite数据库是一个存在于我们某个磁盘的文件,普通的使用,我们是在不断地打开文件–>文件操作–>关闭文件的循环中浪费时间,
如果有1千万条数据等待插入数据库,那么我们这样的操作会花好长时间,因此我们需要寻找一种方法提升读写速度。
假设:既然数据库是一个文件,那么我们为什么不能打开数据库后一次性将数据全部插入进去再关闭数据库呢?
而Qt提供的事物处理函数正好解决了这种难题,具体看下面代码
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)
当然两张表都要创建联合索引,具体的可以百度一下用法
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)
当然两张表都要创建联合索引,具体的可以百度一下用法
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- Oracle用户被锁原因及办法
- 数据库的迁移救援
- Qt 5.6更新至RC版,最终版本近在咫尺
- mysql存储引擎MyISAM与InnoDB的优劣
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- SQLite教程(十一):临时文件
- CentOS下DB2数据库安装过程详解