access一张表中大约有60W笔记录,主键、该建的索引都建了,程序用delphi开发
用sql语句的分页方法,查询一页(20笔记录)需要14秒时间
用ado方式分页更慢,而且狂占内存 直接在access中用sql查询要快一些,大约7秒钟
access真的这么慢吗 以前一直用mysql,几百万笔的记录分页查询也不过几毫秒啊
用sql语句的分页方法,查询一页(20笔记录)需要14秒时间
用ado方式分页更慢,而且狂占内存 直接在access中用sql查询要快一些,大约7秒钟
access真的这么慢吗 以前一直用mysql,几百万笔的记录分页查询也不过几毫秒啊
解决方案 »
- 关于DELPHI 单元应用的疑惑
- 为什么用PrintDialog选择打印机后打印出来仍旧在默认的打印上?
- 100分请问,我想要取得图片字节流数据。比如把图片存到数据库的时候存进去的那一大串数据。
- 我想了四个星期没有解决----adoquery中数据更新
- 请教一下:"Aligned record fields"这个选项有什么用处?
- 这到底是怎么回事?是Delphi的Bugk吗???
- 操作ini文件的问题。为何不能读pchar
- 恳请高手执教!!!!
- ADOTABLE中的MOVEBY(No),是直接移动到指定的记录吗?和 ADOTABLE.RECNO=No一样吗?
- 用DSPACK合并视频和音频
- 关于stringgrid的问题
- fastreport如何在delphi程序中在本地保存报表,并可以加载显示报表
begin sqltext := 'SELECT * FROM (SELECT TOP '+inttostr(RecordsInCurrentPage)+' * FROM (SELECT TOP '+inttostr(RecordsInPage*CurrentPage)+' * FROM table order by 编号 desc)TableA ORDER BY 编号 ) TableB ORDER BY 编号 desc'; SQL.Text := sqltext;
Open;
...
ADOQuery1.CursorLocation := clUseServer;//服务器端游标可以加快数据集打开速度
ADOQuery1.LockType := ltReadOnly;//只读锁会加快数据读取速度 ADOQuery1.DisableControls;
try
//....打开数据集
finally
ADOQuery1.EnableControls;
end;另外还有一点,如果不用Delphi感知控件,如果速度相求很高。没得说一定要用ADOQuery1.RecordSet原生对象来取值,这样大概时间要少一半。
当然如果全用原生对象操作会更快,当然程序也麻烦很多了
LZ可以研究原生对象的如下几个分页方法:
ADOQuery1.Recordset.PageCount
ADOQuery1.Recordset.PageSize;
ADOQuery1.Recordset.AbsolutePage;祝好运!
select top [页大小] [字段] from [表] where [条件 and ] ([排序字段] > (select max([排序字段]) from (select top [页大小]*[页数] [排序段] from [表] [where 条件] order by [排序字段]) as t)) order by [排序字段]
原来用ado分页的方法比用sql分页的方法慢50%,
重设了参数后,用ado的分页方法反而快了50%
结贴