仅4000条记录查询速度很慢!! 我用Delphi6+SqlServer2000,记录仅有4000多条查询时就明显有迟钝感,该怎么解决?谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是绝对不可能地,把你的sql语句拿出来looklook AdoQuery1.Close; AdoQuery1.Sql.Clear; AdoQuery1.Sql.add('select * ......'); ExecSql; 少用lookup.尽量不要在TDBDataSet组件的事件中添加代码。 'select * ......'一般查找数据时,如果没有必要,不要用'*',用相关字段名代替。否则会慢很多的。 AdoQuery1.Close; AdoQuery1.Sql.Clear; AdoQuery1.Sql.add('select * ......'); ExecSql;你为何要写成这样的。 AdoQuery1.Close; AdoQuery1.Sql.Clear; AdoQuery1.Sql.add('select * ......'); Open;还有就是你的select * from .....如果用的字段不多的话你可以要那一个写上那一个就可以了。还有你数据库的日志是如何处理的。它的空间是如何分配的。一般来说给的大点。而后再定时清掉就可以了。 sql : select top 100 from .....这样会好些,用不到的数据一下显示这么多干吗? 如果可以的话,不要把SQL的条件写得太宽松了 首先对要查询的表建索引其次注意SQL语句的优惠,特别是where条件的编写注意,“不等于”运算不会利用索引的,要特别注意希望对楼主有帮助 有遇到同样的问题,感觉用DelPhi+oracle 查询数据特慢,不上万条数据竟然可以等上5分中,老是让可户“耐心”等待,:),惭愧,回去加加索引看看。 把你的SQL语句拿出来看看,这样看不出结果的,拿出来或许可以帮你优化。查询速度与SQL语句有很大关系。 在sql语句固定的情况下,在网络速度固定的情况下,在数据库服务器不繁忙的情况下,在数据表记录数固定的情况下,查询速度仅与索引建立的方式有关 绝对不可能有如此情况,我用D3+Sql server 6.5用的是BDE5.01,在30000条纪录的数据库(20余个表,有10多个Memo,BLOB),不管有没有索引,也不管有多少个INNER JOIN都是速度飞快!在索引的情况下,查询都是一瞬间的事! 如果ADO是返回所有记录,建议在ADO连接组件中将cursorlocation改成server side cursor型,那样会快很多 PS:如果一定要用client side cursor,将AODQUERY的cachesize改成500看看 遇到过类似的情况:我用PB+sybase和d5+sybase做开发,d5通过BDE连接,同样的语句在PB下查询的飞快,在D5下者费时良久,但后来我发现可能是我的电脑(笔记本)的问题。 因为在台式机上运行的也很快,我的数据库中有上百张表,有的表中有数十万比数据。 据我所知,查询速度与下列因素有关:1.硬件性能:包括服务器的和客户端的,服务器性能尤其重要2.网络性能:比如带宽,2M的带宽和32K的肯定有很大差别3.连接数:连接数太多会导致数据库繁忙,查询需要排队等候4.数据库设计:表结构、表数据量大小、索引等5.查询语句:是否关联太多,关联了几个大表?是否使用了已有的索引?另外看看是否一次性下载了全部的查询结果。一般查询时只返回靠前的数据而不是全部,当执行query.next到缓存中数据不够时才下载下一批;如果程序中有query.reccount语句,就会下载全部数据,所以查询变得很慢。建议楼主从这几个方面查找一下原因 把cursorlocation改成client side cursor把cache size 改成500左右把cursor type改成static速度应该可以快点,能在表中加个索引就更好了。 AdoQuery1.Close; AdoQuery1.Sql.Clear; AdoQuery1.Sql.add('select * ......'); ExecSql;ExecSql;有问题用open比较好: ExecSql---> OPen;索引建立 有关FastReport的两个问题 数据库查询一个让我费解的问题,再线等! activeform开发控件时,为何不能调用另一个窗体的函数?? 发票打印! 急,请问哪里有Rxtrayicon控件下载 如何动态生成接点 怎樣對一個查詢得到的結果再進行操作﹐如對查詢結果集的某個字段值求累計和﹖ 怎样动态的建立一个类型文件,文件的类型是程序运行时,由用户动态的输入而得到的。 关于一这个问题 ?在orical数据库中如何用delphi存储jpg图象!!jpg图象是文件的形式!!!急!!!!!! 问题:关于:FastReport的Memo问题: 串口通信问题
AdoQuery1.Sql.Clear;
AdoQuery1.Sql.add('select * ......');
ExecSql;
一般查找数据时,如果没有必要,不要用'*',用相关字段名代替。否则会慢很多的。
AdoQuery1.Sql.Clear;
AdoQuery1.Sql.add('select * ......');
ExecSql;你为何要写成这样的。
AdoQuery1.Close;
AdoQuery1.Sql.Clear;
AdoQuery1.Sql.add('select * ......');
Open;
还有就是你的select * from .....如果用的字段不多的话你可以要那一个写上那一个就可以了。
还有你数据库的日志是如何处理的。它的空间是如何分配的。一般来说给的大点。而后再定时清掉就可以了。
这样会好些,用不到的数据一下显示这么多干吗?
其次注意SQL语句的优惠,特别是where条件的编写
注意,“不等于”运算不会利用索引的,要特别注意
希望对楼主有帮助
查询速度与SQL语句有很大关系。
在30000条纪录的数据库(20余个表,有10多个Memo,BLOB),不管有没有索引,也不管有多少个INNER JOIN都是速度飞快!在索引的情况下,查询都是一瞬间的事!
1.硬件性能:包括服务器的和客户端的,服务器性能尤其重要
2.网络性能:比如带宽,2M的带宽和32K的肯定有很大差别
3.连接数:连接数太多会导致数据库繁忙,查询需要排队等候
4.数据库设计:表结构、表数据量大小、索引等
5.查询语句:是否关联太多,关联了几个大表?是否使用了已有的索引?
另外看看是否一次性下载了全部的查询结果。一般查询时只返回靠前的数据而不是全部,当执行query.next到缓存中数据不够时才下载下一批;如果程序中有query.reccount语句,就会下载全部数据,所以查询变得很慢。建议楼主从这几个方面查找一下原因
把cache size 改成500左右
把cursor type改成static
速度应该可以快点,能在表中加个索引就更好了。
AdoQuery1.Sql.Clear;
AdoQuery1.Sql.add('select * ......');
ExecSql;
ExecSql;有问题
用open比较好:
索引建立