有一个表中有十多个字段,除了主键外均为img类型,每个字段存贮的图片都大约有800多K,当存储了几百条记录后,为了添加记录,在运行select语句很慢,请问怎么能提速select的查询速度!!如下:Public adors As ADODB.Recordset
Set adors = New ADODB.Recordset'*************************************************************
adors.Open "SELECT * FROM (表名) where 1=2", adocn, adOpenDynamic, adLockOptimistic
'********************************************这条语句特别慢
adors.addnew
    adors.Fields("XH").value = n
    Call FileToDB(adors(4), App.Path & "\tif\DDXFB.tif")
    Call FileToDB(adors(5), App.Path & "\tif\DDXFB.tif")
    Call FileToDB(adors(6), App.Path & "\tif\DDXFB.tif")
    Call FileToDB(adors(7), App.Path & "\tif\Pole.tif")
    Call FileToDB(adors(8), App.Path & "\tif\Pole.tif")
    Call FileToDB(adors(9), App.Path & "\tif\Pole.tif")
    Call FileToDB(adors(10), App.Path & "\tif\JCKYW.tif")
    Call FileToDB(adors(11), App.Path & "\tif\JCKYW.tif")
    Call FileToDB(adors(12), App.Path & "\tif\JCKYW.tif")
    Call FileToDB(adors(13), App.Path & "\tif\lx.tif")
    Call FileToDB(adors(14), App.Path & "\tif\lx.tif")
    Call FileToDB(adors(15), App.Path & "\tif\lx.tif")
 adors.Updateadors.Close
Public Sub FileToDB(ByRef fld As ADODB.Field, DiskFile As String)Dim byteData() As Byte  '字节数据数组
Dim NumBlocks As Long   '块数
Dim FileLength As Long  '文件长度
Dim LeftOver As Long    '余数值
Dim SourceFile As Long  '数据源文件
Const BLOCKSIZE = 4096
Dim i As Long
On Error GoTo ErrorHandlerSourceFile = FreeFile                      'FreeFile函数提供尚未使用的文件号
Open DiskFile For Binary Access Read As SourceFile  'OPEN函数激活对文件的(I/O),二进制
FileLength = LOF(SourceFile)                'LOF函数表示以OPEN语句打开的文件以字节数表示的文件大小'''如果图象文件存在,将其保存到数据库
If FileLength = 0 Then
    Close SourceFile                        'CLOSE函数关闭OPEN函数打开的(I/O)文件
    MsgBox DiskFile & " 无内容或不存在!", 64, "提示"
Else
    NumBlocks = FileLength \ BLOCKSIZE
    LeftOver = FileLength Mod BLOCKSIZE     '取块数后的余数值
    ReDim byteData(1 To BLOCKSIZE)
    For i = 1 To NumBlocks
        Get SourceFile, , byteData()        'GET函数将一个以打开的磁盘文件读入一个变量之中
        fld.AppendChunk byteData()          'AppendChunk属性添加数据到二进制字段
    Next i
    
    ReDim byteData(1 To LeftOver)
    Get SourceFile, , byteData()
    fld.AppendChunk byteData()
    Close SourceFile                        'CLOSE函数关闭OPEN函数打开的(I/O)文件
End IfExit Sub
ErrorHandler:End Sub

解决方案 »

  1.   

    提速在数据库设计时,定义主键,可以提高访问速度
    如果你光是为了增加一条记录,打开记录集的时候,可以用:
    select top 0 * from 表名 这样没有数据的检索,得到的只是字段信息,速度会很快的!如果你要进行SELECT检索,最好数据量不要太大,一条,应该没问题!
      

  2.   

    还有一种办法就是用存储过程实现写入数据库图象首先,在SQL SERVER数据库中建立存储过程,VB调用
    参考:
    http://expert.csdn.net/Expert/topic/1594/1594455.xml?temp=.6181757http://expert.csdn.net/Expert/topic/1840/1840356.xml?temp=.8678858http://expert.csdn.net/Expert/topic/1814/1814676.xml?temp=.850918
      

  3.   

    你的设计本身不合理。每一条记录占用的内存过大,执行Select时需要不断进行磁盘交换,哪能快得了?
    中海的方法比较好。
      

  4.   

    微软的SQL文档就不推荐再数据库中保存巨大的image类型数据,用中海的办法是最好的啦。如果需要远程传送文件,我以前做过的一个项目使用FTP实现的,数据库储存ftp路径。
      

  5.   

    谢谢,大家了,其实我是用图片举了个例子,我是把一种文件存到数据库里了,这种文件经常更新的,用的方法和存图片是一样的罢了,我是用的SYBASE数据库的,现在这个问题仍然没有解决的办法,看来只能写个存储过程了,估计也快不了多少的!先把帖子结了吧