strsql = "SELECT strmailid FROM MAILID "
    If recTmp.state = adStateOpen Then recTmp.Close
    recTmp.Open strsql, gdbCurrentDB, adOpenForwardOnly, adLockReadOnly
    Mails = mobjRecordset.GetRows(recTmp.RecordCount)
  open数据取到本地,超过1W条,就效率暴底.  必须取出数据,不是显示分页面的问题.
  请各位大人帮忙解决一下!
  多谢! 

解决方案 »

  1.   

    在MAILID表中建立strmailid的索引试下
      

  2.   

    表MAILID有建立索引(主键)吗?
      

  3.   

    表MAILID有建立索引(主键)吗?
      

  4.   

    数据量大就不要用 GetRows。既然用来 adOpenForwardOnly,最好的方式是逐条读取。
      

  5.   

    应该不只有mailid 可以作为邮件标示吧?
      

  6.   


    1. 你是想快速的取出数据到文件(比如:Excel、文本等等),是吧?
       > 如果是的话,建议你不要用GetRows,也不要逐条读记录,Excel里的CopyFromRecordset效率超快!!2. 你说Open取数据效率低,是指读Sql 数据库效率低还是写文件效率低?
      > 我觉得用 set rs = cnn.excute(sql) 比较简单一些!
      > 如果是读sql数据库效率低的话,建议检查网络质量和带宽,看看数据包是否有重发的,检查多网卡的配置,
        看看该连接的网卡是不是“优先网卡”,检查sql数据库所在的机器性能,检查sql server内存配置...
        ...
      > 如果是写文件效率低,建议用方法(1)。3. 如果select全部的话,没有主键应该不是问题!
       如果用到where等关键字的话或者部分数据的话,表必须要有主键!!!
      

  7.   

    strsql = "SELECT strmailid FROM MAILID " 
        If recTmp.state = adStateOpen Then recTmp.Close 
        recTmp.Open strsql, gdbCurrentDB, adOpenForwardOnly, adLockReadOnly 
        Mails = mobjRecordset.GetRows(recTmp.RecordCount) 
      open数据取到本地,超过1W条,就效率暴底. 
     就是从mailid中取数据出来,只读方式,服务器在局域网,
     MAILID中有 65536 笔记录,光执行recTmp.Open strsql, gdbCurrentDB, adOpenForwardOnly, adLockReadOnly 完毕,也需要花费时间为132秒
    不知道能否提高??