同意gzhughie(hughie)的意见.
同时试试:导入数据后重新更新索引

解决方案 »

  1.   

    to: gzhughie(hughie) 
    1、高水位是什么概念我不太明白,望指教。我在导入完成后做过[重新组织数据及索引页],但速度还是比较慢。
    2、字段数差不多为20个,但字段的长度都不大,基本没有冗余。
    3、查询的索引是针对例如编号的,重复记录不多,而且主键的速度也不快。  硬件升级的空间不大,但我想SQL_SERVER不至于这么弱吧?我用过informix的,在30万条记录级的情况下查找还是很快的。
     望指教!
      

  2.   

    你的数据库是恢复过来的吗?SQL2000好象是有这问题。
      

  3.   

    我试了下,
    赛扬1.3G,128M,WINXP,SQLSERVER2000专业版
    98万条记录,60个FIELD ,主键索引
    select * from tablename
    时间:2~4分钟!
    机器性能第一啊!
      

  4.   

    如果是通过网络存取sql的话可能会因为网络速度的影响而变慢
      

  5.   

    数据量太大,除了升级硬件或拆表的办法,可能没有更好的主意了。(什么SQL的优化,我现在都不相信了,厚厚的资料书上说这样可以优化那样可以优化,但对相同的语句来说事实上效果不会明显)
      

  6.   

    高水位是一个抽象的概念,
        举个例子说一下,比如你有一个水池,当水涨到一个高度的时候,就会在水池的壁上留下一个痕迹(嘻,因为水很脏),就算以后把水池里的水放掉,痕迹依然存在。
        数据表的高水位就是类似这个原理,当你的表曾经到达过一个数据量的时候,就会在你的物理空间上有一个记录,就算你删除了一些数据,这个痕迹也不会改变。
        当你在插入数据时,如果你是用insert int ... values...这种方法插入时,系统会自动找那些你删除数据的存储块,把记录插进去,不会改变高水位;
        但是如果是批量倒入,或者使用insert int ... select ...这种方法批量插入时,系统就会新开辟物理空间,这样高水位就会增加,那么水位越高,系统在查询的时候,要访问的数据存储块就越多,所以导致影响速度。    另外,查询很浪费内存,因为做查询计划,还要把查询出的数据放到内存中,如果内存不够大,你查询的数据量又多,就会导致你查出的结果集,只能有部分放到内存中,到要显示全部数据时,就会不停的从硬盘上一部分一部分的读取、写入、再读取、再写入,这样严重的影响速度,所以如果你的内存不够大,最好不要使用这么大的数据量。
      

  7.   


    To gzhughie(hughie):
    你的高水位说法很有意思。
    我觉得你可以看一下查询的数据表,是否有主键?有时没有主键的数据表查询时会很慢。再者,你的内存太少了!
      

  8.   

    to gzhughie(hughie) :
    多谢指导!
    我的导入是通过存储过程一条一条从文件导入的,所以应该不会存在高水位的问题。系统设计的数据量为100万条,机器性能可以提高,但照目前的情况如此数据级我怕再好的PC机也顶不住。
    另,我的查询是对主键的精确匹配查询,所以每次返回的记录数只有1,对索引字段查询时也是选了TOP 100,请问除了硬件升级外还有办法解决这种性能问题吗?
      

  9.   

    你的内存实在太少了,SQL Server在内存不足时就会导致分块现象,发生分块现象时,SQL server需要频繁的进行页面置换,这是很耗资源的,当然会影响到SQL的性能了。再者使用varchar作为主健也会也会比较耗时,如果能找到你一个整形的列替代她,最好用整形的。此外,影响系统性能的还有很多,比如系统的虚拟内存大小(1.5倍物理内存最佳),磁盘速度,你的数据库文件分布,日志文件分布,tempdb设置等等都会影响到系统的性能。我的系统主表已经三千万条了,而且还有频繁的插入,查询包括大批量的查询,性能还可以,不过我的机器时p4 2G两,2G内存
      

  10.   

    建议加大内存(sql server是很吃内存的)