我用的是SQL2000,程序是VB6写的,目的是用安装在客户端的程序(也就是我用VB6写的),通过局域网把PDF文件保存在SQL数据库某个表中的Binary类型字段中。在程序刚开始使用的一段时间里,保存的速度还不算慢。但随着使用时间增长(到现在已近2年),数据库保存的内容越来越多(目前达到2G),保存过程所花的时间也越来越长,现在一个1M左右的文件几乎需要花5分钟!可以肯定的是,同样用STREAM对象读取数据库中以BINARY类型保存的PDF文件,速度没有滞后的感觉。(同样通过局域网COPY一年1M左右的文件到服务器,没有滞后,因此网络没有问题。服务器为WINSERVER2003,服务器和数据库只也这一个任务,未作他用)。请各位高手看看到底是什么原因导致保存时间剧增。
源程序如下:
Private Sub s_SaveFile() '保存文件到数据库中
Dim iStm As New ADODB.Stream
Dim a As Integer
'读用户选取的文件到STREAM中
With iStm
    .Type = adTypeBinary 
    .Open
    .LoadFromFile CDia.FileName   '用户选取的文件
End WithSet iRe = New ADODB.Recordset
Me.MousePointer = vbHourglass
With iRe
    .Open "select * from zlk", db, 1, 3
    .AddNew '增加一条记录
    ......'保存记录编号等两个字段,与问题无关,省略
    !tx = iStm.Read   ' 字段TX类型为BINARY
    .Update
End WithiRe.Close
iStm.Close
End Sub

解决方案 »

  1.   

    将用户的pdf文件保存到服务器的某个目录,而数据库里只保存对应的路径,这样数据库的负担会减小很多
      

  2.   

    谢谢楼上。
    楼上的方法我考虑过,这种法的缺点是文件不易管理。
    问题貌似不是数据库负担的问题。如果才2G的内容就导致这种问题,那SQL还怎么混呢?
      

  3.   

    SQL 2005以上考虑采用filestream
      

  4.   


    用这个方案比较合理,数据库中只记录文件的FTP地址及名就可以了。
      

  5.   

    With iRe
       '改为这样试试
      .Open "select * from zlk where 1<>1", db, 1, 3
      ...
    End With
      

  6.   

    select top 15.* from View_NoComm where commentid not in (select top 0.Commentid from View_NoComm)  后面的top 0 的话就查询不到第一条数据 高手 高手高手高手高手高手高手高手高手高手
      

  7.   

    改了后,几乎没有任何延迟。
    百度了下,加了WHERE 1<>1 后,查询所结果只有表结构而没有数据,因此加快了文件保存的速度。不知是否可作这样的解释?
      

  8.   

    应该是这样
    因为是新增,没必要读取其他数据;
    若读取了数据,update时,会逐记录的判断在回写数据库