首页 > 数据库 >SQLite 翻页功能优化

SQLite 翻页功能优化

时间:2022-11-16 09:58:20浏览次数:39  
标签:SQLite log 翻页 data limit query 优化 select

好久没有接触数据库了,最近因为工作的原因,又开始在Qt上使用数据库,这次主要用的是Qt自带的sqlite,使用方便简单。

项目需求:需要实时存储网络报文数据,并能实时查询,查询时要求全部查询或自定义查询,且都具有翻页、跳转等功能。

实现过程中遇到了以下问题:

  1. 网络报文是实时的,且数量不定,故一条一条进行存储效率太低;
  2. 翻页显示时,界面要求只能显示最多25条数据,随着数据量增到,使用limit进行分页,检索效率越来越低。

针对问题一:

经查询资料,决定采用事务的方式进行存储,即使用db.transaction()。但是这种方式支持大批量的数据,且在进行执行事务时,不支持多线程同时读写。

故在实现时,采用定时器,先将网络报文进行临时存储,当定时器溢出时,将缓存数据一次性存储到数据库中。由于项目中建立了2个线程,一个写,一个读,由于采用事务机制,不支持同时读写,需要在线程加上互斥锁进行保护。

 1 bool status = true;
 2 db.transaction();
 3 QSqlQuery query(db)
 4 query.prepare("INSERT INTO data_log(timeStamp,pipe,topic,srcType)VALUES (:timeStamp,:pipe,:topic,:srcType)"
 5 for(int i=0;i<num,i++)
 6 {
 7    LOGMSG log = dataList[i];//dataList缓存了要存的数据内容    
 8    query.bindValue(":srcType",log.srcType);
 9    //省略,主要是进行参数绑定
10    query.bindValue(":timeStamp",static_cast<int>(log.TimeStamp));
11    status = query.exec();
12    if(!status)
13    {
14         qDebug()<<"addData db exec() is error!<<endl;
15         qDebug()<<query.lastError().text()<<endl;
16         db.rollback();
17         return;
18    }
19    query.finish();
20 
21 }
22 db.commit();//提交事务
23 dataList.remove(0,num);
View Code

 

针对问题二:

为了实现分页功能,刚开始采用的SQL语句如下:

select * from data_log limit 偏移量起始位置,条数
// 举例
query.prepare("select * from data_log limit "+QString::number(CurrentItem)+","+QString::number(PAGE_NUMBER));

但是随着数据量越来越大,偏移量的值也越来越大,检索效率越来越低,故将SQL语句优化如下:

 

select * from data_log where id>=偏移量 limit 条数
//举例
query.prepare(QString("select * from data_log where id>= %1 limit %2").arg(CurrentItem-1).arg(PAGE_NUMBER));

检索效率明显提升!(当然这里有个前提,创建数据库时,id为主键,且为AUTOINCREMENT)

检索效率差,除了优化SQL语句,建立索引也是一种好方法,效果也很明显,这里不再赘述。

 

标签:SQLite,log,翻页,data,limit,query,优化,select
From: https://www.cnblogs.com/ycbeginner/p/16894279.html

相关文章

  • Nginx配置优化详解
    原文http://www.1000zx.cn/it/13526.html大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大......
  • 【建议收藏】15755字,讲透MySQL性能优化(包含MySQL架构、存储引擎、调优工具、SQL、索引
    0.目录1)MySQL总体架构介绍2)MySQL存储引擎调优3)常用慢查询分析工具4)如何定位不合理的SQL5)SQL优化的一些建议1MySQL总体架构介绍1.1MySQL总体架构介绍引言MySQL......
  • 记录一次11表关联查询的优化
    一、优化背景接收的历史项目有一个存储过程,查询涉及11张表。单个存储过程在线上查询一次耗时时间较长。获取该存储过程在无压力的测试库单独执行,最好的情况,执行单次需要......
  • 基于遗传算法的电动汽车有序充放电优化问题(附matlab源码)
    ​   为了减小电动汽车规模化充电给配电网安全稳定运行带来的不利影响,提出一种基于遗传算法的电动汽车有序充电策略。考虑用户出行规律及保证配电网的安全稳定运行,以......
  • 基于粒子群优化深度置信网络的分类预测(matlab)
    1.深度置信网络(DBN)DBN由一层BP神经网络和若干层RBM栈式叠加而成。最顶层的softmax回归层作为标签层输出分类识别的结果,其余层完成特征提取。DBN的学习训练过程......
  • 基于粒子群优化深度置信网络的分类预测
    ​决策树原理        决策树通过把样本实例从根节点排列到某个叶子节点来对其进行分类。树上的每个非叶子节点代表对一个属性取值的测试,其分支就代表测试的每个结......
  • 基于多目标粒子群的微电网优化调度(附matlab代码)
    1、部分结果展示       %储能最大放电功率StorageMaxDischargingPower=250;%储能最大充电功率StorageMaxChargingPower=-200;%柴油发电机最大功率DGMa......
  • Tomcat的概述、部署及优化
    一、Tomcat概述1、Tomcat的概念Tomcat是Java语言开发的,服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下......
  • 解读数仓常用模糊查询的优化方法
    摘要:本文讲解了GaussDB(DWS)上模糊查询常用的性能优化方法,通过创建索引,能够提升多种场景下模糊查询语句的执行速度。本文分享自华为云社区《GaussDB(DWS)模糊查询性能优......
  • 细说React组件性能优化
    React组件性能优化最佳实践React组件性能优化的核心是减少渲染真实DOM节点的频率,减少VirtualDOM比对的频率。如果子组件未发生数据改变不渲染子组件。组件卸载前......