问题
译注:作者已整合了该帖,看着更像是一篇实验性文章,因此我稍微进行了排版。
SQLite 的优化比较棘手,就批量插入而言,其速度可以从每秒 85 条优化到每秒 96,000 条。下面我们来具体看下实验过程和结果,
背景:
- 文件数据:多伦多市全部交通时间表,大小约 28MB,以 TAB 分隔的文本文件(约 865,000 条记录)
- 机器环境: Windows XP 3.60 GHz P4
- 编译环境:Visual C 2005 Release,使用完全优化(/ Ox)和优先快速代码(/ Ot)
- 数据库:SQLite 3.6.7
实验一:建表 读取解析数据
一个简单的 C 程序,逐行读取文本文件,将字符串拆分为值,但先不把数据插入到 SQLite 数据库中。代码如下:
代码语言:javascript复制/*************************************************************
Baseline code to experiment with SQLite performance.
Input data is a 28 MB TAB-delimited text file of the
complete Toronto Transit System schedule/route info
from http://www.toronto.ca/open/datasets/ttc-routes/
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "sqlite3.h"
#define INPUTDATA "C:\TTC_schedule_scheduleitem_10-27-2009.txt"
#define DATABASE "c:\TTC_schedule_scheduleitem_10-27-2009.sqlite"
#define TABLE "CREATE TABLE IF NOT EXISTS TTC (id INTEGER PRIMARY KEY, Route_ID TEXT, Branch_Code TEXT, Version INTEGER, Stop INTEGER, Vehicle_Index INTEGER, Day Integer, Time TEXT)"
#define BUFFER_SIZE 256
int main(int argc, char **argv) {
sqlite3 * db;
sqlite3_stmt * stmt;
char * sErrMsg = 0;
char * tail = 0;
int nRetCode;
int n = 0;
clock_t cStartClock;
FILE * pFile;
char sInputBuf [BUFFER_SIZE] = "