C++: Sqlite3几种数据插入方式比较
2013-10-28 12:59
351 查看
在sqlite3中,数据的更新模式默认为PRAGMA synchronous = FULL; 这个参数影响了更新数据的速度。
下面的测试代码表明,OFF状态比Full状态的更新速度快50倍左右
1. 示例代码
下面的测试代码表明,OFF状态比Full状态的更新速度快50倍左右
1. 示例代码
#include "sqlite3.h" #include <stdio.h> #include <time.h> #include <string.h> static char s_szDBFile[] = "d:\\test.db"; //耗时计算 class CElapseTime { public: CElapseTime(char *sPrompt) { memset(m_sPrompt, 0, sizeof(m_sPrompt)); strcpy(m_sPrompt, sPrompt); m_Start = clock(); } ~CElapseTime() { printf("[%s]耗时: %f\n", m_sPrompt, (clock() - m_Start)*1.0f/CLK_TCK); } private: char m_sPrompt[255]; clock_t m_Start; }; void TestInsert_SYN(int n, char *sSync, char *szSql) { char sPrompt[255]; sprintf(sPrompt, "%s 状态, %d条记录", sSync, n); CElapseTime aET(sPrompt); char *errMsg; sqlite3 *pDB; sqlite3_open(s_szDBFile, &pDB); sprintf(sPrompt,"PRAGMA synchronous = %s;", sSync); sqlite3_exec(pDB, sPrompt, 0,0,0); for(int i=0; i<n; i++) { sqlite3_exec(pDB, szSql, 0, 0, &errMsg); } sqlite3_close(pDB); } void TestInsert_Full_Trans(int n, char *szSql) { char sPrompt[255]; sprintf(sPrompt, "FULL状态事务版, %d条记录", n); CElapseTime aET(sPrompt); char *errMsg; sqlite3 *pDB; sqlite3_open(s_szDBFile, &pDB); sqlite3_exec(pDB, "Begin transaction; ", 0,0,0); for(int i=0; i<n; i++) { sqlite3_exec(pDB, szSql, 0, 0, &errMsg); } sqlite3_exec(pDB,"commit transaction;",0,0, &errMsg); sqlite3_close(pDB); } void CreateDB() { sqlite3 *pDB; sqlite3_open(s_szDBFile, &pDB); sqlite3_exec(pDB, "Create Table tblTest(a Text, b Text)", 0, 0, NULL); sqlite3_close(pDB); } void main() { int n = 5; char szInsertSQL[] = "Insert into tblTest(A,B) values(\"中华人民共和国中华人民共和国中华人民共和国\",\"中华人民共2和国中华人民共和国2中华人民共和国2\");"; CreateDB(); TestInsert_SYN(n, "FULL", szInsertSQL); TestInsert_SYN(n, "NORMAL", szInsertSQL); n *= 100; TestInsert_SYN(n, "OFF", szInsertSQL); TestInsert_Full_Trans(n, szInsertSQL); remove(s_szDBFile); }
2. 测试结果
机器配置xp sp3, i7-2640M, 内存3.48GB[FULL 状态, 5条记录]耗时: 0.359000 [NORMAL 状态, 5条记录]耗时: 0.297000 [OFF 状态, 500条记录]耗时: 0.797000 [FULL状态事务版, 500条记录]耗时: 0.250000
相关文章推荐
- 对比sqlite3_exec 和sqlite3_bind 插入100万行数据的速度 with BEGIN TRANSACTION using C++ and SQLite
- C++ 插入图像数据到sqlite3中的方法(blob字段)
- SQL获取插入后数据ID的三种方式比较
- 安卓中Sqlite插入数据两种方式
- 大量数据插入的几种方式的速度比较
- 几种批量插入数据方式的比较
- 二叉排序树的建立、插入、删除、查找、比较、4种遍历方式的C++完整实现版
- 大量数据插入的几种方式的速度比较
- java在excel里插入文字数据和图片(JXL方式)
- Android数据存储方式之 SQLite
- iOS学习之sqlite的创建数据库,表,插入查看数据
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
- iOS学习之sqlite的创建数据库,表,插入查看数据
- c++创建多线程的三种方式的比较 和 多线程通信
- Swift - SQLite中Data类型数据的插入、读取(BLOB类型字段)
- C++函数返回map的两种方式的比较
- php快速插入大批量数据到Sqlite3
- Android数据存储方式:SharePreference、SQLite、ContentProvider有什么不同?