如何加快查询速度?(50分)

  • 主题发起人 主题发起人 小城月光
  • 开始时间 开始时间

小城月光

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
adoquery+access单机数据库access有近20万条记录,查询一次要13秒左右,太慢了,后来我改用diamond access 发现居然更慢要15秒左右。对adoquery作了优化处理还是不行。代码如下

ADOQuery2.SQL.Add('select * from fixalarms where cdate(alm_datelast)=:rq');
ADOQuery2.Parameters.ParamByName('rq').Value:=Formatdatetime('yyyy"-"mm"-"dd',rq);
ADOQuery2.SQL.Add('order by cdate(alm_datelast),alm_timelast');
因为数据库alm_datelast字段为字符型如8/14/2005,所以我用了cdate函数转换,估计是这个原因导致了速度慢,各位大侠有什么办法解决吗?
 
对于日期型的,我是建议用数值型字段代替,只存如20060628,
这样数值的查询速度快
 
ADOQuery2.SQL.Add('select * from fixalarms where cdate(alm_datelast)=:rq');
ADOQuery2.Parameters.ParamByName('rq').Value:=Formatdatetime('yyyy"-"mm"-"dd',rq);
ADOQuery2.SQL.Add('order by cdate(alm_datelast),alm_timelast');

修改如下:
ADOQuery2.SQL.Add('select * from fixalarms where alm_datelast = :rq');
ADOQuery2.Parameters.ParamByName('rq').Value := Formatdatetime('mm/dd/yyyy',rq);
ADOQuery2.SQL.Add('order by cdate(alm_datelast));

速度会快些,你试试。
 
对于查询后面的过滤条件,不要对字段使用函数,那样会减慢速度,还有一定要select ×
么,这个也会减慢速度。楼上的方法应该可以提高一些。
 
二楼说的有道理。
 
用cdate也是没有办法的事情
dill1126的方法可能行不通
ADOQuery2.SQL.Add('select * from fixalarms where alm_datelast = :rq');
ADOQuery2.Parameters.ParamByName('rq').Value := Formatdatetime('mm/dd/yyyy',rq);
rq是日期型的,alm_datelast是字符型的不能直接比较
另外假如把日期转换为字符一样有问题,比如查
8/7/2005,8/11/2005两个日期间的数据就查不到,因为字符型比较认为7比11大,
另外数据库中alm_datelast字段格式是字符型是定下来的,无法改变
 
后退
顶部