我现在在做一个人事考勤系统,有一个保存员工的每天考勤的信息,我们厂大概有2000多人,
那么每天就有2000多笔的考勤记录,1个月下来就有2000*30=60000笔记录,
所以每次打开这个表时,速度都很慢,我是用 ADODataSet来打开这个表的,
刷新数据时要等3-5秒才刷新过来.
这个表的关键字段为日期,工号.
我又创建了3个索引:
1.日期
2.工号
3.日期,工号
但是速度还是没有改善,请问如何改善这个速度呢?
那么每天就有2000多笔的考勤记录,1个月下来就有2000*30=60000笔记录,
所以每次打开这个表时,速度都很慢,我是用 ADODataSet来打开这个表的,
刷新数据时要等3-5秒才刷新过来.
这个表的关键字段为日期,工号.
我又创建了3个索引:
1.日期
2.工号
3.日期,工号
但是速度还是没有改善,请问如何改善这个速度呢?
解决方案 »
- 请教如何获取本地局域网内服务器的的电脑名和IP地址
- 思考:从YouTube被高价收购到Delphi的无人问津
- 诚徵delphi开发工程师(深圳罗湖)
- TNotebook,TTabSet这两个控件在哪?
- 如何蜕变成DELPHI的开发高手?
- 关于c/s结构数据库的问题,可能很简单的,在线给分
- 关于使用QUREY控件,实现多表查询的问题。
- 怎么取opendialog1.filename的文件名? 如:opendialog1.filename:='c:\data\ddd.txt'我要取结果'ddd'
- 取硬盘ID(不是卷标号)windows9X与2000c通用
- dll中读写文件
- 求助,做了一个返回值是结构体的函数,如何将结果返送会去?
- sendmssage LVM_DELETEITEM为什么一次删除两条记录
我在打开考勤记录的界面时,只是打开当天的数据而已,但是我这个日考勤记录表有100多个字段哦.
我是用这个语句打开的:
adodataset.close;
adodataset.commandtext:='select * from TKQDayReport where KQDate='''+'2008-06-07'+'''';
adodataset.open;
打开界面时倒不觉得速度很慢,但是我在这个界面上做查询时,就显得的很慢了.查询的语句也是用上面的语句
去查询的.
1、从小处说,你不要使用TADODataSet,可以使用 TADOQuery ,这样可以灵活控制打开那些范围数据,也就是加WHERE条件2、从数据库角度讲,你的数据库设计有问题,这样一个频繁写频繁查数据量大的表,建那么多索引是一件很恐怖的事情3、从SQL角度说,如果SQL里面使用了LEFT JOIN又有ORDER BY排序,那么很可能你的客户端打开相当的慢,这个是开发工具的问题,目前只有绕开4、从总体看,你的系统设计有问题,打卡明细那个表寥寥几个字段(工号、卡号、刷卡时间)即可,或者加几个开发辅助字段,合并后每天的结果可能有数十个字段,但是这个表只保存结果即可,索引只要工号+日期唯一索引或主键即可,不需要那么多索引。
当然,这个时候和你的数据库选择有关系,采用Oracle和SQLSERVER是不同的。