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;