偶曾试过从1180000条记录的数据表中按条件检索数据。结果速度奇慢不说,最后还超时了~请问各位大虾有什么好的办法,能快速的实现目的

解决方案 »

  1.   

    我试过在SQL查询分析器里面从1100000条记录中检索出50000条记录,要大概1:30秒的时间~我想存储过程也不会快多少吧!
      

  2.   

    不知道你每一条记录有多大。如果是SQL Server 2000/2005数据库,可以根据如下步骤来优化速度:
    1。是否建了了恰当的索引?如果没有,请建立适当的索引。至于什么样的索引能称为“适当”,请参考SQL Server BOL。
    2。如果有恰当的索引,那么是否索引的碎片过多?如果过多,请用DBCC工具整理。
    3。如果索引碎片很低,那么可以考虑将数据文件和主索引方在一个文件组中,其他索引方在另一个文件组中。将两个文件组分布在不同的IDE通道或者不同的SCSI硬盘上,以便SQL Server能够利用多线程并行读取数据。
    4。如果3仍不奏效,可以考虑使用RAID进一步提高磁盘IO,并适当增大内存以减少磁盘交换。
    5。如果4仍不奏效,请考虑使用多台服务器进行分布式查询。
      

  3.   

    上述指导原则建立的前提是:
    程序中用一条SQL语句或带参数存储过程来向数据库请求符合条件的数据。当然,用存储过程回快一些。
    一般情况下,如果在程序中获得了条件,然后向数据库查询符合该条件的记录,那么请尽量使用“正过滤”,即尽量不要在SQL语句中使用NOT,也可以在一定程度上加快执行速度。并且在指定的搜索条件中包含对主键字段的搜索也能提高速度。
    SQL语句的优化可以在一定程度上进行,但是速度的关键还是在于SQL的运行效率上。磁盘IO是最大的瓶颈。
      

  4.   

    这当然是可以的,服务器端游标或者服务器端分页以及其他一些客户端方法都可以实现对数据的分页,不过这些技术都是以资源为代价的,要保持连接并且会消耗服务器端的内存。
    如果,返回的几十万数据都是你需要的,并且这些数据你只需要先读出来(当然不排除都读出来之后再修改或者删除之类的),可以用DataReader一边读一边显示或者发给用户(多线程实现也可以),DataReader会占用活动连接,但是是.NET里面最轻量级和最快的数据读取类,可以在一定程序上解决你的问题。
      

  5.   

    上面的说法对于Windows程序适用。
    对于ASP.NET程序,需要其他方法。
      

  6.   

    还有,经测试超大数据量的话oracle比sqlserver查询快一些。
      

  7.   

    用ASP呢?能实现吗?偶记得ASP没有多线程\还有读出的数据只用来浏览!
    还有楼上的说了“游标”但是在实际当中我发现,程序是一下把检索到的数据全部读取到本地然后才进行分页的。这样的结果是第一次打开网页速度慢~
      

  8.   

    SQL应该不支持上亿条的记录吧!
      

  9.   

    不知道大家注意到没有?
    用access的时候,当一个表中的记录超过10W条以后,我们打开时,接那个滚动条,不能一下字拉到低~它好像一次只给我们看一部分,~然后在读取一些~不知道这是什么技术~
      

  10.   

    用ASP实现就不用多线程了。在你的循环中每读取一行或者一定行数量的数据后,就立即用Response.Flush()把html输送给浏览器,这样浏览器就能一部分一部分的显示你取出来的数据,而不用等到整个循环都结束了。