在Delphi4中,我们有一个SELECT查询,它使用TQuery组件一次获取3个文本类型的字段以及其他必需字段。
有超过1,000条记录(未来可能会增加)。
这个查询消耗了大量内存。我认为由于下一个查询需要花费大量的时间来执行。
我使用BDE连接到SQL-server。
我需要优化性能,这样就不会花费太多时间。敬请指教。
发布于 2012-05-16 20:19:35
为了减少时间(取决于数据),我们可以在查询中使用DATALENGTH。
喜欢
DATALENGTH(TEXT) <> 0这不会加载在TEXT字段中没有值的记录。
发布于 2011-12-15 18:42:16
您应该考虑某种分页机制。不要向客户端获取1000条(或100万条)记录,而是使用分页和SQL-server ROW_NUMBER()来获取每页50-100条记录的块。
因此,查询如下:
SELECT id, username FROM mytable ORDER BY id可能如下所示:
SELECT * FROM (
SELECT id, username, TOTAL_ROWS=Count(*) OVER(), ROW_NUMBER() OVER(ORDER BY id) AS ROW_NUM
FROM mytable
) T1
WHERE ROW_NUM BETWEEN 1 AND 50应该对ORDER BY字段进行索引(如果可能),以加快速度。
发布于 2011-12-15 16:34:08
如果您使用TQuery,请确保在检索循环之外使用本地TField以加快处理速度( FieldByName方法有点慢)。
你可以尝试我们的免费开源类来访问任何数据库引擎。
它提供了通过OleDB直接访问MS,而无需调用ADO层。
它在速度上进行了非常优化,即使在旧版本的Delphi上也是Unicode就绪的。它已经在Windows XP、Vista和Seven (包括64位)上进行了测试。
它有一个TQuery仿真器:这不是DB.pas单元中定义的真正的TQuery,而是一个具有大多数相同方法的类。而且您不需要使用所有的BDE类和单元。缺点是你不能使用Delphi DB可视化控件,但对于一个快速的TQuery来说,它可以完成这项工作。
它有一些独特的特性(比如用于字段访问的后期绑定),这是值得考虑的。
它不需要任何第三方库(如BDE),从Delphi5到XE2都可以使用。我猜它也可以在Delphi4下运行。
您可以下载并请求支持in our site。
https://stackoverflow.com/questions/8516042
复制相似问题