我现在在做一个人事考勤系统,有一个保存员工的每天考勤的信息,我们厂大概有2000多人,
那么每天就有2000多笔的考勤记录,1个月下来就有2000*30=60000笔记录,
所以每次打开这个表时,速度都很慢,我是用 ADODataSet来打开这个表的,
刷新数据时要等3-5秒才刷新过来.
这个表的关键字段为日期,工号.
我又创建了3个索引:
1.日期
2.工号
3.日期,工号
但是速度还是没有改善,请问如何改善这个速度呢?

解决方案 »

  1.   

    说的对,有选择的加载,adodataset一次性加载10万条以上记录会效率很低
      

  2.   

    我也不是一次性加载的啊;
    我在打开考勤记录的界面时,只是打开当天的数据而已,但是我这个日考勤记录表有100多个字段哦.
    我是用这个语句打开的:
    adodataset.close;
    adodataset.commandtext:='select * from TKQDayReport where KQDate='''+'2008-06-07'+'''';
    adodataset.open;
    打开界面时倒不觉得速度很慢,但是我在这个界面上做查询时,就显得的很慢了.查询的语句也是用上面的语句
    去查询的.
      

  3.   

    你的表设计有问题,一个考勤的表,仁兄都能做一百多个字段,真是I服You
      

  4.   


    1、从小处说,你不要使用TADODataSet,可以使用 TADOQuery ,这样可以灵活控制打开那些范围数据,也就是加WHERE条件2、从数据库角度讲,你的数据库设计有问题,这样一个频繁写频繁查数据量大的表,建那么多索引是一件很恐怖的事情3、从SQL角度说,如果SQL里面使用了LEFT JOIN又有ORDER BY排序,那么很可能你的客户端打开相当的慢,这个是开发工具的问题,目前只有绕开4、从总体看,你的系统设计有问题,打卡明细那个表寥寥几个字段(工号、卡号、刷卡时间)即可,或者加几个开发辅助字段,合并后每天的结果可能有数十个字段,但是这个表只保存结果即可,索引只要工号+日期唯一索引或主键即可,不需要那么多索引。
      当然,这个时候和你的数据库选择有关系,采用Oracle和SQLSERVER是不同的。
      

  5.   

    如果非要打开这么多数据,那么用bde吧,bde会自动控制返回的数据