VB ODBC方式更新mysql数据库表相当相当慢!!
我用VB写了一个程序,通过VB用ODBC方式访问数据库,对数据进行处理。以前后台我用的是ACCESS数据库,更新速度相当快!
现在后台改用MYSQL了,同样还是用ODBC方式访问后台MYSQL数据库,且处理同一批数据,我发现后台改用MYSQL更新数据速度相当相当慢!!!计算机负荷很高,在任务管理器中发现一个叫 "mysqld-nt.exe"进程负荷在数据更新期间一直在50%左右 ,我的CPU 是P4 3.2GHz的双核INTEL CPU ,内存4Gbytes,硬件配置应当没有问题,而且之前用ACCESS处理数据,相当快,20万条数据,基本上6分钟搞定了,而改用MYSQL后1小时还没有处理完呢,CPU负荷相当高,慢的实在不可接受,真的是太慢了。
注:ACCES 和 MYSQL中的后台表我均没有建索引。
请高手指教,非常感谢!!
相关信息:MYSQL版本:MySQL Server 5.0
相关VB代码:
Dim session_id As Double
Dim mysql_cnn As New ADODB.Connection
Dim record_set As New ADODB.Recordset
Set mysqlcmd = New ADODB.Command
Dim mysql_ConnStr As String
mysql_ConnStr = "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=" & "localhost" & ";" & _
"DATABASE=" & "test" & ";" & _
"UID=" & "root" & ";PWD=" & ";" & _
"OPTION=3;stmt=SET NAMES GB2312"
mysql_cnn.Open mysql_ConnStr
mysqlcmd.ActiveConnection = mysql_cnn
record_set.Open "select * from my_list_tbl where DLR=-1 AND SLR<>-1 ORDER BY my_list_tbl.time_id ", mysql_cnn, adOpenForwardOnly, adLockOptimistic
session_id = 1
Do Until record_set.EOF
record_set.Fields(19) = session_id '更新session_id 字段
session_id = session_id + 1
record_set.MoveNext
Loop
record_set.Close
mysql_cnn.Close
本程序段的功能没有问题,就是更新数据相当慢!!!
MYSQL 表定义:
CREATE TABLE my_list_tbl (
f1 varchar(25) default NULL,
f2 varchar(20) default NULL,
f3 varchar(20) default NULL,
f4 varchar(20) default NULL,
f5 varchar(20) default NULL,
DLR bigint(20) default '-1',
SLR bigint(20) default '-1',
f8 varchar(20) default NULL,
f9 varchar(20) default NULL,
f10 varchar(20) default NULL,
f11 varchar(20) default NULL,
f12 varchar(20) default NULL,
f13 varchar(30) default NULL,
f14 varchar(30) default NULL,
f15 varchar(80) default NULL,
f16 varchar(10) default NULL,
f17 varchar(50) default NULL,
time_id bigint(20) default NULL,
f19 bigint(20) default NULL,
session_id bigint(20) default NULL,
f21 tinyint(4) default NULL,
f22 tinyint(4) default NULL,
f23 double(20,0) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
------解决方案--------------------
我用mysql-connector-odbc-5[1].1.5-win32.msi这个驱动程序,没有发现你说的那种问题。
------解决方案--------------------
没有看到记录,假设F1唯一
SET @i=1;
UPDATE my_list_tbl a INNER JOIN
(
select *.@i:=@i+1 AS jl from my_list_tbl where DLR=-1 AND SLR<>-1 ORDER BY my_list_tbl.time_id) b
ON a.f1=b.f1
SET a.session_id=b.jl;
微信 赏一包辣条吧~
支付宝 赏一听可乐吧~