本帖最后由 zhix88 于 2009-06-16 03:54:31 编辑

解决方案 »

  1.   

    里面有多少数据?如果数据多的话在表里面加索引如果你不修改数据库的话用只读方式打开
    rs.Open SQL, Conn, 1, 1试试看,不过我觉得不是你的数据库操作问题
      

  2.   

    服务端CPU占用率持续7%-10%,我测试了一下,注释掉以下数据库操作的代码,CPU占用率始终为0%或1%。
    注释掉的内容为:
        Set rs = CreateObject("ADODB.RecordSet")
        SQL = "select * from users where ID=" & ID
        rs.Open SQL, Conn, 1, 3
        If Not rs.EOF And Not rs.BOF Then
            If rs("Time1") >= 60 Then
                rs("Time1") = rs("Time1") - 50
                rs("D1") = rs("D1") + 1
                rs("D2") = rs("D2") + 2
            Else
                rs("Time1") = rs("Time1") + 10
            End If
        End If
        rs.Close
        Set rs = Nothing这里如何修改可以提高性能?
      

  3.   

    忘了说,用来查询的"ID"是自动编号,有索引的,users表有1600多条数据,我也尝试压缩修复了一下数据库,没有效果
    现在服务端功能上正常,已经正常使用了几个月了,但服务端CPU占用率一直很高,用一个用户的话说“这软件也太差了吧,才100多人在线,服务端压力就这么大,明显算法有问题啊。”
      

  4.   

    对数据库的操作比较频繁或并发操作比较多,则建议将数据库换成SQL
      

  5.   

    熬了一个晚上,脑子糊涂了上面的代码段少了rs.Update    Set rs = CreateObject("ADODB.RecordSet")
        SQL = "select * from users where ID=" & ID
        rs.Open SQL, Conn, 1, 3
        If Not rs.EOF And Not rs.BOF Then
            If rs("Time1") >= 60 Then
                rs("Time1") = rs("Time1") - 50
                rs("D1") = rs("D1") + 1
                rs("D2") = rs("D2") + 2
            Else
                rs("Time1") = rs("Time1") + 10
            End If
        End If
        rs.Update
        rs.Close
        Set rs = Nothing
      

  6.   


    我对SQL的安全性没有研究,不敢用SQL啊
      

  7.   

    这是个网吧用软件,现在网吧用的万象收费系统也是Access数据库,作为一个收费系统,数据操作量应该比我这个软件大很多,我观察了一下,CPU占用率就没有超过3%过麻烦大虾们指点一下,VB如何操作Access数据库效率比较高?
      

  8.   

     楼主您要想一下网络的问题,人家网吧的是较好的交换机或者是光纤来的。您如果是用一般的交换机或集线器那肯定会出现这种情况。不过一般像您这样多客户端一般都是使用SQL或者Oracle数据库的。
    您想提高效率应注意以下几点:
    1、建立数据库时尽量不要使用中文作为字段名,使用纯字母。
    2、数据类型要配置好。
    3、如要使用网络时,尽量不要使用ACCESS做为数据库,本身ACCESS数据库只针对单机使用。
      

  9.   

    一顿狂搜,发现有人说用Execute查询和更新可以提高效率,我测试了一下,果然有效,使用存储过程效率比较低,比如下面DB3使用存储过程1万次是21秒,而DB4使用Execute同样1万次只要14秒
    Private Sub DB3()
        timeA = Now()
        Call MyDB
        Set rs = CreateObject("ADODB.RecordSet")
        For i = 0 To 10000
            SQL = "select * from users where Sid=10001"
            rs.Open SQL, Conn, 1, 3
            If Not rs.EOF And Not rs.BOF Then
                rs("Ttime") = rs("Ttime") + 1
                rs("D") = rs("D") + 1
                rs("B") = rs("B") + 1
            End If
            rs.Update
            rs.Close
        Next i
        Set rs = Nothing
        Conn.Close
        Set Conn = Nothing
        timeB = Now()
        s = DateDiff("s", timeA, timeB)
        Text3.Text = s
    End Sub
    '存储过程方式10000次,21秒Private Sub DB4()
        timeA = Now()
        Call MyDB
        Set rs = CreateObject("ADODB.RecordSet")
        For i = 0 To 10000
            SQL = "select * from users where Sid=10001"
            Set rs = Conn.Execute(SQL)
                Ttime = rs("Ttime") + 1
                D = rs("D") + 1
                B = rs("B") + 1
            SQL = "Update users set Ttime=" & Ttime & ",D=" & D & ",B=" & B & " where Sid=10001"
            Set rs = Conn.Execute(SQL)
        Next i
        Set rs = Nothing
        Conn.Close
        Set Conn = Nothing
        timeB = Now()
        s = DateDiff("s", timeA, timeB)
        Text4.Text = s
    End Sub
    Execute方式10000次,14秒
    改用Conn.Execute方式后CPU占用率明显降低了,数据库字段名全部都是字母,数据类型全部最小化配置了,麻烦各位大大们再给点建议,怎样做还可以提高性能?