加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

sqlite插入和查询效率提高方法及测试结果

(2015-10-16 11:52:44)
标签:

股票

【提高插入效率的方法】
1、手动开启事务,插入后一次性提交。
2、一次准备(sqlite3_prepare_v2),多次绑定(sqlite3_bind_*)。
3、如果有定期备份的机制,而且少量数据丢失可接受,可将同步方式设置为OFF,默认为FULL。
sqlite3_exec(db, "PRAGMA synchronous = OFF; ", 0,0,0);
4、如果不需要将数据存储到文件,可采用内存模式。
sqlite3_open(":memory:", &db);
5、ournal_mode 调优
sqlite3_exec(db,"pragma journal_mode = WAL; ",0,0,0);
如果在事务执行中程序崩溃或掉电,数据库有可能发生错误。

可参考 http://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite?rq=1


【提高查询效率的方法】
1、创建索引,可以显著提高select的速度,同时也可以提高update的速度。
2、用 replace代替select+insert/update


【测试结果】


文件模式,

synchronous=FULL

文件模式,

synchronous=OFF

内存模式,

synchronous=FULL

内存模式,

synchronous=OFF

自动提交模式,调用sqlite3_exec语句

11.3s/100

9.4s/100000

12.0s/1000000

12.1s/1000000

自动提交模式,调用sqlite3_prepare_v2sqlite3_step语句

11.7s/100

9.3s/100000

12.0s/1000000

12.0s/1000000

非自动提交模式,调用sqlite3_exec语句

10.6s/1000000

10.2s/1000000

9.9s/1000000

10.0s/1000000

非自动提交模式,调用sqlite3_prepare_v2sqlite3_step语句

10.6s/1000000

10.2s/1000000

9.8s/1000000

9.7s/1000000

非自动提交模式,调用sqlite3_prepare_v2sqlite3_step语句,绑定方式

3.5s/1000000

3.2s/1000000

2.9s/1000000

2.9s/1000000




无索引

有索引

select语句在id in (1...10000000)的记录中查找100条记录:id in (1..10) and (1000000...1000010) and (2000000...2000010) and (3000000...3000010) and (4000000...4000010) and (5000000...5000010) and (6000000...6000010) and (7000000...7000010) and (8000000...8000010) and (9000000...9000010)

9.8s

0.003s-0.005s

更新或者插入id in (30000001...30000010)10条记录

都需要插入:select + insert

16.06+1.66=17.72s

0.002+1.465=1.467s

都需要更新:select + update

16.01+17.02=33.03s

0.002+1.425=1.427s

replace into

1.4-1.5s

1.4-1.5s




【源码】


#include
#include
#include
#include
#include "sqlite3.h"

//#define MAX_NUM 10000000
#define MAX_NUM 10000000

sqlite3 *db;

float timeuse,timeuse1,timeuse2,timeuse3;
struct timeval tstart,tend,t1,t2,t3,t4;

//获得所用时间
void gettimeuse(char *msg, struct timeval start, struct timeval end)
{
    timeuse = 1000000*(float)(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec;
    timeuse /= 1000000;
    fprintf(stderr,"%s=%.3f(s)\n", msg, timeuse);
}

//打开数据库
void open_database()
{
    int rc;
//    rc = sqlite3_open("/home/wang/jzq.db",&db);
    rc = sqlite3_open("/home/wang/jzq_index.db",&db);
//    rc = sqlite3_open(":memory:", &db);
    if (rc==SQLITE_OK)
        fprintf(stderr,"You have opened jzq database successfully!\n");
    else
    {
        fprintf(stderr,"can't open jzq database:%s!!!",sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }
}


//创建表
void createTable(sqlite3 *db)
{
//    const char* createTableSQL = "CREATE TABLE IF NOT EXISTS TESTTABLE (id BIGINT, \
//                                   name text, birthday datetime)";
    const char* createTableSQL = "CREATE TABLE IF NOT EXISTS TESTTABLE (id BIGINT, \
                                   name text, birthday datetime,PRIMARY KEY(id, name))";

    sqlite3_stmt* stmt = NULL;
    int len = strlen(createTableSQL);

    //2. 准备创建数据表,如果创建失败,需要用sqlite3_finalize释放sqlite3_stmt对象,以防止内存泄露。
    if (sqlite3_prepare_v2(db,createTableSQL,len,&stmt,NULL) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        return;
    }

    //3. 通过sqlite3_step命令执行创建表的语句
    if (sqlite3_step(stmt) != SQLITE_DONE)
    {
        fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        return;
    }

    //4. 释放创建表语句对象的资源。
    sqlite3_finalize(stmt);
    fprintf(stderr, "Succeed to create test table now.\n");
}


//自动提交模式,调用sqlite3_exec语句
void insertdata1()
{
//    sqlite3_exec(db,"PRAGMA synchronous = OFF; ",0,0,0);
    int i, num=0;
    char createTableSQL[300];
    const char* tmpsql = "insert into TESTTABLE values (%d,'%s','%d-%d-%d %d:%d:%d');";
    char *zErrMsg;

    char name[26][3]={"aa", "bb", "cc", "dd", "ee", "ff", "gg",
                        "hh","ii","jj","kk","ll","mm","nn",
                        "oo","pp","qq","rr","ss","tt",
                        "uu","vv","ww","xx","yy","zz"};

    for (i=0; i
    {
        sprintf(createTableSQL, tmpsql, i+1, name[i&], 2015,10,10, (i+1)/3600, (i+1)600/60, (i+1)`);

        if(SQLITE_OK != sqlite3_exec(db,createTableSQL,0,0,&zErrMsg))
        {
            fprintf(stderr, "insertdata1 failed: %s\n",zErrMsg);
            sqlite3_close(db);
            exit(1);
        }
        num++;

//        if (num00==0)
//            fprintf(stderr, "num=%d\n", num);
    }
    fprintf(stderr, "insertdata1 success!!!\n");
}

//自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句
void insertdata2()
{
//    sqlite3_exec(db,"PRAGMA synchronous = OFF; ",0,0,0);
    int i, num=0;
    char createTableSQL[300];
    const char* tmpsql = "insert into TESTTABLE values (%d,'%s','%d-%d-%d %d:%d:%d');";
    sqlite3_stmt* stmt = NULL;

    char name[26][3]={"aa", "bb", "cc", "dd", "ee", "ff", "gg",
                        "hh","ii","jj","kk","ll","mm","nn",
                        "oo","pp","qq","rr","ss","tt",
                        "uu","vv","ww","xx","yy","zz"};

    for (i=0; i
    {
        sprintf(createTableSQL, tmpsql, i+1, name[i&], 2015,10,10, (i+1)/3600, (i+1)600/60, (i+1)`);
//        fprintf(stderr, "%s\n", createTableSQL);
        int len = strlen(createTableSQL);

        //2. 准备创建数据表,如果创建失败,需要用sqlite3_finalize释放sqlite3_stmt对象,以防止内存泄露。
        if (sqlite3_prepare_v2(db,createTableSQL,len,&stmt,NULL) != SQLITE_OK)
        {
            fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
            if (stmt)
                sqlite3_finalize(stmt);
            sqlite3_close(db);
            exit(1);
        }

        //3. 通过sqlite3_step命令执行创建表的语句
        if (sqlite3_step(stmt) != SQLITE_DONE)
        {
            fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
            if (stmt)
                sqlite3_finalize(stmt);
            sqlite3_close(db);
            exit(1);
        }
        num++;

//        if (num00==0)
//            fprintf(stderr, "num=%d\n", num);
    }

    //4. 释放创建表语句对象的资源。
    sqlite3_finalize(stmt);
    fprintf(stderr, "insertdata2 success!!!\n");
}


//自动提交模式,调用sqlite3_exec语句
void insertdata3()
{
//    sqlite3_exec(db,"PRAGMA synchronous = OFF; ",0,0,0);
    int i, num=0;
    char createTableSQL[300];
    const char* tmpsql = "insert into TESTTABLE values (%d,'%s','%d-%d-%d %d:%d:%d');";
    char *zErrMsg;

    char name[26][3]={"aa", "bb", "cc", "dd", "ee", "ff", "gg",
                        "hh","ii","jj","kk","ll","mm","nn",
                        "oo","pp","qq","rr","ss","tt",
                        "uu","vv","ww","xx","yy","zz"};

    const char* beginSQL = "BEGIN TRANSACTION";
    if(SQLITE_OK != sqlite3_exec(db,beginSQL,0,0,&zErrMsg))
    {
        fprintf(stderr, "insertdata3 failed: %s\n",zErrMsg);
        sqlite3_close(db);
        exit(1);
    }

    for (i=0; i
    {
        sprintf(createTableSQL, tmpsql, i+1, name[i&], 2015,10,10, (i+1)/3600, (i+1)600/60, (i+1)`);
//        fprintf(stderr, "%s\n", createTableSQL);

        if(SQLITE_OK != sqlite3_exec(db,createTableSQL,0,0,&zErrMsg))
        {
            fprintf(stderr, "insertdata1 failed: %s\n",zErrMsg);
            sqlite3_close(db);
            exit(1);
        }
        num++;

//        if (num00==0)
//            fprintf(stderr, "num=%d\n", num);
    }

    const char* commitSQL = "COMMIT";
    if(SQLITE_OK != sqlite3_exec(db,commitSQL,0,0,&zErrMsg))
    {
        fprintf(stderr, "insertdata3 failed: %s\n",zErrMsg);
        sqlite3_close(db);
        exit(1);
    }
    fprintf(stderr, "insertdata3 success!!!\n");
}

//非自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句
void insertdata4()
{
//    sqlite3_exec(db,"PRAGMA synchronous = OFF; ",0,0,0);
    int i, num=0;
    char createTableSQL[300];
    const char* tmpsql = "insert into TESTTABLE values (%d,'%s','%d-%d-%d %d:%d:%d');";
    sqlite3_stmt* stmt = NULL;

    char name[26][3]={"aa", "bb", "cc", "dd", "ee", "ff", "gg",
                        "hh","ii","jj","kk","ll","mm","nn",
                        "oo","pp","qq","rr","ss","tt",
                        "uu","vv","ww","xx","yy","zz"};

    const char* beginSQL = "BEGIN TRANSACTION";
    int len = strlen(beginSQL);
    if (sqlite3_prepare_v2(db,beginSQL,len,&stmt,NULL) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    if (sqlite3_step(stmt) != SQLITE_DONE)
    {
        fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    sqlite3_finalize(stmt);


    for (i=0; i
    {
        sprintf(createTableSQL, tmpsql, i+1, name[i&], 2015,10,10, (i+1)/3600, (i+1)600/60, (i+1)`);
//        fprintf(stderr, "%s\n", createTableSQL);
        int len = strlen(createTableSQL);

        //2. 准备创建数据表,如果创建失败,需要用sqlite3_finalize释放sqlite3_stmt对象,以防止内存泄露。
        if (sqlite3_prepare_v2(db,createTableSQL,len,&stmt,NULL) != SQLITE_OK)
        {
            fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
            if (stmt)
                sqlite3_finalize(stmt);
            sqlite3_close(db);
            exit(1);
        }

        //3. 通过sqlite3_step命令执行创建表的语句
        if (sqlite3_step(stmt) != SQLITE_DONE)
        {
            fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
            if (stmt)
                sqlite3_finalize(stmt);
            sqlite3_close(db);
            exit(1);
        }
        num++;

//        if (num00==0)
//            fprintf(stderr, "num=%d\n", num);
    }
    //4. 释放创建表语句对象的资源。
    sqlite3_finalize(stmt);


    const char* commitSQL = "commit";
    len = strlen(commitSQL);
    if (sqlite3_prepare_v2(db,commitSQL,len,&stmt,NULL) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    if (sqlite3_step(stmt) != SQLITE_DONE)
    {
        fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    sqlite3_finalize(stmt);

    fprintf(stderr, "insertdata4 success!!!\n");
}

//非自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句,绑定方式
void insertdata5()
{
    sqlite3_exec(db,"PRAGMA synchronous = OFF; ",0,0,0);
    char name[26][3]={"aa", "bb", "cc", "dd", "ee", "ff", "gg",
                        "hh","ii","jj","kk","ll","mm","nn",
                        "oo","pp","qq","rr","ss","tt",
                        "uu","vv","ww","xx","yy","zz"};
    char datetime[50];

    int i, num=0;
    sqlite3_stmt* stmt = NULL;

    const char* beginSQL = "BEGIN TRANSACTION";
    if (sqlite3_prepare_v2(db,beginSQL,strlen(beginSQL),&stmt,NULL) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    if (sqlite3_step(stmt) != SQLITE_DONE)
    {
        fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    sqlite3_finalize(stmt);

    //构建基于绑定变量的插入数据。
    const char* insertSQL = "INSERT INTO TESTTABLE VALUES(?,?,?)";
    if (sqlite3_prepare_v2(db,insertSQL,strlen(insertSQL),&stmt,NULL) != SQLITE_OK)
    {
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }

    int year=86400*365;
    int month=86400*30;
    int day=86400;
    int hour=3600;
    int min=60;

    for (i=0; i
    {
        //在绑定时,最左面的变量索引值是1。
        sqlite3_bind_int(stmt, 1, i+1);
        sqlite3_bind_text(stmt, 2, name[i&], strlen(name[i&]), SQLITE_TRANSIENT);

        sprintf(datetime, "d-d-d d:d:d",
                2015+(i+1)/year, 10+(i+1)%year/month, 1+(i+1)%month/day,
                (i+1)�y/hour, (i+1)%hour/min, (i+1)%min);
        sqlite3_bind_text(stmt, 3, datetime, strlen(datetime), SQLITE_TRANSIENT);

        if (sqlite3_step(stmt) != SQLITE_DONE)
        {
            sqlite3_finalize(stmt);
            sqlite3_close(db);
            exit(1);
         }
         //重新初始化该sqlite3_stmt对象绑定的变量。
        sqlite3_reset(stmt);
        num++;

//        if (num00==0)
//            fprintf(stderr, "num=%d\n", num);
    }
    sqlite3_finalize(stmt);


    const char* commitSQL = "commit";
    if (sqlite3_prepare_v2(db,commitSQL,strlen(commitSQL),&stmt,NULL) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_prepare_v2 error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    if (sqlite3_step(stmt) != SQLITE_DONE)
    {
        fprintf(stderr, "sqlite3_step error, %s!!!\n", sqlite3_errmsg(db));
        if (stmt)
            sqlite3_finalize(stmt);
        sqlite3_close(db);
        exit(1);
    }
    sqlite3_finalize(stmt);

    fprintf(stderr, "insertdata5 success!!!\n");
}

void findDatabyID()
{
    char *sql = "select * from testtable where (id>=1 and id<=10) or \
            (id>=1000000 and id<=1000010) or (id>=2000000 and id<=2000010) or \
            (id>=3000000 and id<=3000010) or (id>=4000000 and id<=4000010) or \
            (id>=5000000 and id<=5000010) or (id>=6000000 and id<=6000010) or \
            (id>=7000000 and id<=7000010) or (id>=8000000 and id<=8000010) or \
            (id>=9000000 and id<=9000010);";//100条    9.8s

    int nrow,ncolumn;
    char **azResult=0;
    char *zErrMsg;
    int i,j;

    int ret = sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
    if(SQLITE_OK != ret)
    {
        printf("ret=%d, operate failed: %s\n",ret,zErrMsg);
    }

//    fprintf(stderr, "nrow=%d, ncolumn=%d\n", nrow, ncolumn);
    for (i=1;i<=nrow;i++)
    {
        for (j=0;j
        {
            fprintf(stderr, "%s  ",azResult[i*ncolumn+j]);
        }
        fprintf(stderr, "\n");
    }
    sqlite3_free_table(azResult);
}


void findDatabyID_index(int begin, int end)
{
    char sql[100];
    sprintf(sql, "select * from testtable where (id>=%d and id<=%d)", begin, end);

    int nrow,ncolumn;
    char **azResult=0;
    char *zErrMsg;
    int i,j;

    int ret = sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
    if(SQLITE_OK != ret)
    {
        printf("ret=%d, operate failed: %s\n",ret,zErrMsg);
    }

//    fprintf(stderr, "nrow=%d, ncolumn=%d\n", nrow, ncolumn);
    for (i=1;i<=nrow;i++)
    {
        for (j=0;j
        {
            fprintf(stderr, "%s  ",azResult[i*ncolumn+j]);
        }
        fprintf(stderr, "\n");
    }
    sqlite3_free_table(azResult);
}

void createIndex()
{
    char *zErrMsg;
    char *indexsql = "CREATE INDEX id_index ON testtable (id);";
    if(SQLITE_OK != sqlite3_exec(db,indexsql,0,0,&zErrMsg))
    {
        fprintf(stderr, "createIndex failed: %s\n",zErrMsg);
        sqlite3_close(db);
        exit(1);
    }
}

//来一条数据,然后和以前相同ID的数据对比,如果有,更新,没有,插入。
void replaceTest(int id)
{
    int nrow,ncolumn;
    char **azResult=0;
    char *zErrMsg;

    char *name="xyz";
    int year=2016,month=1,day=1,hour=1,min=1,sec=1;

    gettimeofday(&t3,NULL);
    char selectsql[100];
    sprintf(selectsql, "select * from testtable where id=%d;", id);

    int ret = sqlite3_get_table(db,selectsql,&azResult,&nrow,&ncolumn,&zErrMsg);
    if(SQLITE_OK != ret)
    {
        printf("ret=%d, operate failed: %s\n",ret,zErrMsg);
    }
    gettimeofday(&t4,NULL);
    timeuse1+=timeuse;

    if (nrow>0)
    {
        fprintf(stderr, "====nrow=%d====, 存在!!!\n", nrow);
        int i,j;
        for (i=0;i<=nrow;i++)
        {
            for (j=0;j
            {
                fprintf(stderr, "%s  ",azResult[i*ncolumn+j]);
            }
            fprintf(stderr, "\n");
        }

        gettimeofday(&t3,NULL);
        char updatesql[100];
        sprintf(updatesql, "update testtable set name='%s', birthday='d-d-d d:d:d' where id=%d;",
                name, year, month, day, hour, min, sec, id);
        if(SQLITE_OK != sqlite3_exec(db,updatesql,0,0,&zErrMsg))
        {
            fprintf(stderr, "insertdata1 failed: %s\n",zErrMsg);
            sqlite3_close(db);
            exit(1);
        }
        gettimeofday(&t4,NULL);
        timeuse2+=timeuse;
    }
    else
    {
        gettimeofday(&t3,NULL);
        fprintf(stderr, "====nrow=0====, 不存在!!!\n");
        char insertsql[100];
        sprintf(insertsql, "insert into TESTTABLE values (%d,'%s','d-d-d d:d:d');",
                id, name, year, month, day, hour, min, sec);
        if(SQLITE_OK != sqlite3_exec(db,insertsql,0,0,&zErrMsg))
        {
            fprintf(stderr, "insertdata1 failed: %s\n",zErrMsg);
            sqlite3_close(db);
            exit(1);
        }
        gettimeofday(&t4,NULL);
        timeuse3+=timeuse;
    }
    sqlite3_free_table(azResult);
}


//来一条数据,然后和以前相同ID的数据对比,如果有,更新,没有,插入。
void replaceintoTest(int id)
{
    char *name="ayz";
    int year=2016,month=1,day=1,hour=1,min=1,sec=1;

    char insertsql[100];
    sprintf(insertsql, "replace into TESTTABLE values (%d,'%s','d-d-d d:d:d');",
            id, name, year, month, day, hour, min, sec+1);

    char *zErrMsg;
    if(SQLITE_OK != sqlite3_exec(db,insertsql,0,0,&zErrMsg))
    {
        fprintf(stderr, "insertdata1 failed: %s\n",zErrMsg);
        sqlite3_close(db);
        exit(1);
    }
}


int main()
{
    open_database();
    createTable(db);

//    gettimeofday(&t1,NULL);
//    insertdata1();//自动提交模式,调用sqlite3_exec语句
//    gettimeofday(&t2,NULL);
//    gettimeuse("insertdata1", t1, t2);

//    gettimeofday(&t1,NULL);
//    insertdata2();//自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句
//    gettimeofday(&t2,NULL);
//    gettimeuse("insertdata2", t1, t2);

//    gettimeofday(&t1,NULL);
//    insertdata3();//自动提交模式,调用sqlite3_exec语句
//    gettimeofday(&t2,NULL);
//    gettimeuse("insertdata3", t1, t2);

//    gettimeofday(&t1,NULL);
//    insertdata4();//非自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句
//    gettimeofday(&t2,NULL);
//    gettimeuse("insertdata4", t1, t2);

//    gettimeofday(&t1,NULL);
//    insertdata5();//非自动提交模式,调用sqlite3_prepare_v2和sqlite3_step语句,绑定方式
//    gettimeofday(&t2,NULL);
//    gettimeuse("insertdata5", t1, t2);

//    gettimeofday(&t1,NULL);
//    findDatabyID();
//    gettimeofday(&t2,NULL);
//    gettimeuse("findDatabyID", t1, t2);

//    gettimeofday(&t1,NULL);
//    createIndex();//添加索引
//    gettimeofday(&t2,NULL);
//    gettimeuse("findDatabyID", t1, t2);
//
//    gettimeofday(&t1,NULL);
//    findDatabyID_index(1, 10);
//    findDatabyID_index(1000000, 1000010);
//    findDatabyID_index(2000000, 2000010);
//    findDatabyID_index(3000000, 3000010);
//    findDatabyID_index(4000000, 4000010);
//    findDatabyID_index(5000000, 5000010);
//    findDatabyID_index(6000000, 6000010);
//    findDatabyID_index(7000000, 7000010);
//    findDatabyID_index(8000000, 8000010);
//    findDatabyID_index(9000000, 9000010);
//    gettimeofday(&t2,NULL);
//    gettimeuse("findDatabyID_index", t1, t2);

//    gettimeofday(&t1,NULL);
//    int i, id=30000000;
//    for(i=1; i<=10; i++)
//    {
//        replaceTest(id+i);
//    }
//    gettimeofday(&t2,NULL);
//    gettimeuse("replaceTest", t1, t2);
//    fprintf(stderr, "timeuse1=%0.3f, timeuse2=%0.3f, timeuse3=%0.3f\n", timeuse1, timeuse2, timeuse3);

    gettimeofday(&t1,NULL);
    int i, id=30000000;
    for(i=1; i<=10; i++)
    {
        replaceintoTest(id+i);
    }
    gettimeofday(&t2,NULL);
    gettimeuse("replaceintoTest", t1, t2);

    return 1;
}








0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有