当前位置: 首页 > article >正文

sqlite数据插入效率

一、程序效率测试

时间相关接口:
        int gettimeofday(struct timeval*tv, struct timezone *tz);
功能:得到从1970年1月1日0时0分0秒到现在的秒数。<可以利用该函数来计算一个程序的运行时间,只需在程序前后调用该函数,并用后来的函数时间减去开始的函数时间就可以。注意单位的转变。>        精度到微秒
参数:tv:获取到的秒数
结构体:   struct timeval {
               time_t      tv_sec;     /* seconds */          秒
               suseconds_t tv_usec;    /* microseconds */     微妙    1s=1000000us
           };

        tz:关于时区
 结构体:  struct timezone {
               int tz_minuteswest;     /* minutes west of Greenwich */  格林威治向西的分钟数
               int tz_dsttime;         /* type of DST correction */      夏令时修正的类型
           };
返回值:成功:0;     失败:-1

二、提高sqlite数据插入效率

1、开启事务机制

所谓”事务“就是指一组SQL命令,这些命令要么一起执行,要么都不被执行。

在SQLite中,每调用一次sqlite3_exec()函数,就会隐式地开启了一个事务,如果插入一条数据,就调用该函数一次,事务就会被反复地开启、关闭,会增大IO量。

如果在插入数据前显式开启事务,插入后再一起提交,则会大大提高IO效率,进而加数据快插入速度。

开启事务:BEGIN;/BEGIN TRANSACTION;

将事务的修改保存到数据库中:COMMIT;    /END TRANSACTION;

2、关闭写同步(危险)

synchronous Pragma 获取或设置当前磁盘的同步模式,该模式控制积极的 SQLite 如何将数据写入物理存储。
在SQLite中,数据库配置的参数都由编译指示(pragma)来实现的,而其中synchronous选项有三种可选状态:full、normal、off。
full写入速度最慢,但保证数据是安全的,不受断电、系统崩溃等影响;
而off可以加速数据库的一些操作,但如果系统崩溃或断电,则数据库可能会损毁

PRAGMA synchronous = OFF;

3、执行准备

事先将SQL语句编译好,然后再一步一步(或一行一行)地执行。执行时提高速度。

1)sqlite3_prepare_v2() 创建sqlite3_stmt语句对象;
2)sqlite3_bind_*() 绑定参数值到sqlite3_stmt;
3)sqlite3_step() 运行sql语句,可以是一次,也可以是循环执行
4)sqlite3_reset() 重置sqlite3_stmt对象;
5)sqlite3_finalize() 销毁sqlite3_stmt对象。

例如:将文件插入到数据库中。

注:开启事务机制前后效率比较:(单位:秒)


http://www.kler.cn/news/293195.html

相关文章:

  • Ubuntu安装android studio(压缩包版)
  • 想入门网络安全却不知道怎么入手,看这一篇就够了!
  • 如何在Mac中修改pip的镜像源
  • Pyspark中的ROW对象使用
  • 基础学习之——Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • #驱动开发
  • 什么是RPC
  • 使用SVD(奇异值分解)进行降维的奇妙之旅
  • STM32外设SPI(串行通信),W25Q64(8Mb)
  • 软件测试面试(平安保险)
  • 容器化技术在非结构化数据中台的部署研究
  • 父类是给java项目SpringCloud微服务 中SpringBoot解决继承父类后 maven标红
  • java下一页怎么实现的
  • 消息中间件都有哪些
  • MongoDB-副本集-Replica Sets
  • 设计模式 | 原型模式
  • 数学建模强化宝典(14)Fisher 最优分割法
  • 电脑硬盘数据丢失了怎么恢复?简单实用的硬盘数据找回的方法
  • JS生成二维码QRCode代码
  • EI会议推荐-第二届大数据与数据挖掘国际会议(BDDM 2024)
  • 地平线SuperDrive首秀:千人研发投入,出场即「比肩第一梯队」
  • C++ STL-List容器概念及应用方法详解
  • 如何优化Oracle数据库的SQL性能?
  • MySQL5.7.36之高可用架构部署-MHA-VIP漂移
  • 【无标题】一起学习LeetCode热题100道(67/100)
  • Pikachu靶场之RCE漏洞详解
  • 通义灵码助力高校开学第一课,“包”你满意,新学期加油!
  • 后端开发面经系列--快手音视频C++开发
  • 集成电路学习:什么是RAM随机存取存储器
  • 【时时三省】(C语言基础)指针进阶 例题3