最近在开发中才发现的一个问题,但凡是用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++) 中,所以不要考虑是编写代码的问题了。。代码就简单的插入语句。请高手们指点谢谢
能加一下你QQ么。。或者你加一下我的,,,737883840 (啊所)这个问题其实是我无意中发现的。。由于以前处理数据的量很小很小,根本没考虑过这种问题,不过按正常来说,也不该出现这问题的为什么jdbc访问同一个数据库同一张表同一个插入操作就那么正常呢,要是相差1秒2秒那样子也属于正常,毕竟驱动不一样,但是这个差距也太扯蛋了wwwwb你说呢?如果有环境的话。。你也可以试一试的。。这边我又测试代码。。呵呵。。
引擎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
要是可以的话。。我可以加一下你们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
START TRANSACTION
insert into ..
COMMIT看看速度