这两天在InnoDB做了一下测试,看看其运行效率,结果很让我失望,当然也有可能是我配置没有合理。
结果:添加数据效率小于1200/s
运行程序应该没有问题,在oracle上能达到8000/s~12000/s觉得这个效率比较低,请教大家的InnoDB能达到什么样的值,谢谢!

解决方案 »

  1.   

    这是InnoDB的事务机制导致的问题,我以前也遇到过这个问题,原因是因为MYSQL的InnoDB缺省打开了AUTOCOMMIT标志,所以每条单独的插入语句MYSQL都会当作事务来执行的,例如:
    INSERT INTO table VALUES(1, 2);
    MYSQL会转换成为一下三条语句再执行:
    BEGIN TRANS
    INSERT INTO table VALUES(1, 2);
    COMMIT
    解决方法是,连接到数据库时,执行一条语句"SET AUTOCOMMIT = FALSE"
    然后,在你执行一批SQL语句时,先执行"BEGIN TRANS",然后执行要修改数据的SQL语句,最后再执行一次"COMMIT"提交数据修改事务。
    如下:
    pDatabase->Execute("BEGIN TRANS;");
    for(uint32 i = 0; i < 1000; i++)
    {
      pDatabase->Execute("INSERT INTO table VALUES(1, 2);");
    }
    pDatabase->Execute("COMMIT");关于事务(TRANS)等相关资料可以查询MYSQL帮助。
      

  2.   

    有BEGIN TRANSACTION 的时候,前面就没必要再加SET AUTOCOMMIT = FALSE.另用扩展插入语句  insert .. values (..),(..)....速度会很快
    mysql_dump默认生成的插入语句就是扩展的.