不要使用BETWEEN,这个耗费资源,你首先建立索引,然后写一个SP来操作。

解决方案 »

  1.   

    不用DBGird控件的话使用什么可以显示数据呢?有什么好的显示控件来查看这些数据呢?
      

  2.   

    通过分段建立索引,在Select中能否制定查询,另外可自己写查询语句,好好的优化一下。
      

  3.   

    我建立了三个索引,速度还是特别慢,我后来用sql查询分析器查询,结算一个月的数据需要十机分钟,用Foxpro7.0的数据库来完成这项工作不到一分钟,是不是Foxpro比SQL要好呀?有人说Foxpro是最快的数据库,这种说法对吗?
      

  4.   

    “有人说Foxpro是最快的数据库,这种说法对吗?”
    我认为这种观点的人大概只会用(或只见过)FOXPRO,
    好的DATABASE有很多DB2,ORACLE,SYBASE,MS SQLSERVER....,foxpro因该只算是个人DATABASE,
    “我建立了三个索引,速度还是特别慢,”
    你在查询的字段么包括INDEX字段,查询的速度才会有很多的提高,而且对海量数据应该采用数据仓库或采用分布处理。
      

  5.   

    我不知道你是否知道ADOQuery的工作原理,如果知道的话,请不要怪我啰嗦,ADOQuery有几个重要的属性决定了它的工作模式和工作效率。CursorLocation、CacheSize、CursorType。    CursorLocation决定了ADOQuery的数据存取模式,它分为Server-side和Client-side两种模式,如果你选择的是Server-side(将CursorLocation属性设为clUseServer)那么当你使用ADOQuery查询数据时,查询的结果将保存在数据源的ADO缓存中或者是存储在数据源本身的缓存中,(如果你的数据源是SQL Server那末查询的结果将保存在SQL server的缓存中),数据源只把ADOQuery指定的CacheSize大小的数据传给客户端的ADO引擎,并存储在客户端的ADO缓存中共应用程序处理,如果你指定的CacheSize为10的话那么数据源一次只传回10笔数据给客户端,如果客户端要处理第十一笔数据就需要在向服务器端的ADO引擎申请传递下10笔数据。Client-side模式(clUseClient)则一次将所有的查询结果传回到客户端的ADO缓存中,然后再由客户端ADO Cursor控制让客户端应用程序处理。Server-side模式将会占用服务器较大的资源,且客户端每处理完一笔数据后就需要向服务器在申请下一笔数据,所以速度较慢,Client-side所有的数据都已传到本地,所以只需要一次传递,以后不再需要向服务器申请,但是在第一次申请时需要传递大量的数据,所以等待的时间较长。一般建议使用Client-side+  StaticCursor的模式,适当的调整CacheSize(500-1000左右)。   再来看看你的问题,一次查询返回90多万条记录这种查询应该是不合理的,让我们计算一下,如果一条记录长度为100个字节。900*1024*100=90MB!如果你的应用程序与服务器不再同一台机器,90M的数据仅网络传送时间就非常可观了。所以建议使用多次小批量的查询来代替一次查询所有记录的做法,你可以每次只查一天的纪录,查询n次来返回一个月的纪录。实践证明这种查询模式比一次查询所有记录要快(我的实际经验)。
      

  6.   

    以上你的看法我同意,我目前的CursorLocation 设置的为Static,CursorType 为Client 模式,我也试过查询一天的数据这种情况,速度确实提高了许多倍,但在这个过程中我遇到了另外一个问题就是服务器的资源几被耗尽了,造成网络上其他工作站存取数据的速度受到了很大的影响(结算一个月的数据)几乎造成了其他工作站的死机,有没有更好的解决方案,服务器配置IMB NetFinty 5000 CPU P3 500 RAM 256 M,我在结算的时候
    服务器的资源几乎被耗尽,可以采用什么方法好呢?
      

  7.   

    90万条记录一下子读出来??需要吗?能不能从根本上解决。 top 1000
      

  8.   

    能够分细的就尽量细。。
    例如DELPHI用个循环查
    where 挂机时间='2002-1-1'

    where 挂机时间='2002-1-31'
    那样内存使用量就是原来的1/30之一啦。。
    在循环外层继续可以套循环啊。例如可以根据客户的分类。
    那么每次查询使用的内存更少了。这样分开来做,SQL SERVER上话的时间更多。
    不过在那时间段内机子的附和会少点的。