最近在开发中才发现的一个问题,但凡是用C 或者C++语言通过编程形式操作MySQL 数据库,它的效率都很低,测试:插入5000条(只有三个属性 code varchar(20) username(20) address(40))这样的数据,不管是通过MyODBC(5.1)还是通过 MySQL C API 的编程形式操作数据库都得花上 130 多秒,汗死我了,正常的通过JDBC访问的话也只需要5秒左右的,这个测试在 Mysql 5.0 和 MySQL 5.5都测试过,也都分别以 MyODBC 和 MySQL C API 的形式测试过,结果都是差不多的都在130 - 150秒之间徘徊,那位高手曾今遇到过这个问题了。或者懂得怎么解决的。。请发表一下见解,(最后我想说,不会是语句的问题的:测试语句就是一句 Insert Into tablename(xxx,xxx,xxx) vulues('xx','xxxx','xxxx') 插入语句,这个插入语句至于一个 for(int i=0;i<5000;i++) 中,所以不要考虑是编写代码的问题了。。代码就简单的插入语句。请高手们指点谢谢

解决方案 »

  1.   

    wwwwb
    能加一下你QQ么。。或者你加一下我的,,,737883840 (啊所)这个问题其实是我无意中发现的。。由于以前处理数据的量很小很小,根本没考虑过这种问题,不过按正常来说,也不该出现这问题的为什么jdbc访问同一个数据库同一张表同一个插入操作就那么正常呢,要是相差1秒2秒那样子也属于正常,毕竟驱动不一样,但是这个差距也太扯蛋了wwwwb你说呢?如果有环境的话。。你也可以试一试的。。这边我又测试代码。。呵呵。。
      

  2.   

    测试了一下,
    引擎INNODB
    CREATE TABLE `ttp2` (
      `code` varchar(20) DEFAULT NULL,
      `username` varchar(20) DEFAULT NULL,
      `address` varchar(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8不打开事务,用时接近120秒,
    打开事务,用时接近1秒
    用VFP连接MYSQL进行测试的
    lcConnectString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Port=3306;Database=ee;USER=root;Pwd=ZWTL"
    nHandle = SQLSTRINGCONNECT(lcConnectString)
    ?nHandle
    qq=sqlexec(nHandle,"START TRANSACTION")
    ?qq
    dd=TIME()
    ?dd
    FOR i=1 TO 5000
    qq=sqlexec(nHandle,"insert into ttp2 values('xx','xxxx','xxxx')")
    NEXT
    qq=sqlexec(nHandle,"COMMIT")
    ?qq
    dd1=TIME()
    ?dd1
    ?dd1-dd
      

  3.   

    回复:WWWWA 和 ACMAIN_CHM
    要是可以的话。。我可以加一下你们QQ的,我直接把那些代码发给你好了现在我贴一些主要的代码出来
    1.这是MySQL C API 写的代码
    char *host = "localhost";   
    char *user = "root";   
    char *pass = "1478";   
    char *db = "db_ProductTrace";   
    char *Qnotifysql="insert into tb_test(code,username,address) Values('8888888555555525','李四','你好就到了风口)";
    2.这是使用CADODatabase这个网上封装好的类写的代码:
    CString strConnection = _T("Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=db_ProductTrace;User=root;Password=1478;Option=3");db.Open(strConnection);
    sql.Format("insert into tb_test(code,username,address) Values('5555555','张三家','接撒李开复')");
    for(int i=0;i<5000;i++)
         db.Execute(sql);
    上面的都是主要代码的伪代码,希望大牛多多指点,可以的话加我QQ737883840
      

  4.   

    连接字串是一样的,在你的代码中加入
    START TRANSACTION
    insert into ..
    COMMIT看看速度