在数据库中快速定位 table

Fast positioning in a database table

我有一个大约有 50000 行和 16 列的数据库(至少目前是这样)。当在应用程序的主窗体中按下按钮时,程序会进行一些计算,并从中计算出结果。我需要定位table的当前记录作为计算结果

示例:我有结果35500。我需要将位置设置为table中的记录号35500。我怎样才能快速完成它? 我使用 ADO(没有 SQL),我尝试过像

这样的指令
table.First;
table.MoveBy(35500);

但是在这种情况下它们非常慢。我还必须提到定位是在没有任何组件(如 TDBGrid 或其他任何组件)的情况下完成的,因此它必须是一种更快的方式

我知道你说没有连接到你的数据集的 db-aware 控件,但是你是否尝试过比较执行 MoveBy(50000) 的时间,而它被调用 .DisableControls.EnableControls?您可能会认为,如果没有任何 db-aware 组件,使用或不使用 .DisableControls.EnableControls 没有什么区别,但实际上确实如此。

在我的系统上,对 Sql 服务器 (2014) 执行 MoveBy(50000) 需要 19+ 秒没有 .DisableControls.EnableControls 和 0.2 秒,这是一个巨大的差异。

我认为我对前一个问题的回答可能是相关的:

顺便说一句,MoveBy() 主要用于当转到所需行的最佳方式可以通过其 Distance 参数表示时。正如 Christine Ross 在评论中指出的那样,如果您知道要移动到的行中一个或多个字段的值,使用布尔 Locate 函数会更快,如

if AdoQuery1.Locate('CountryCode', 'US', [])  then

Locate 允许您指定多个要匹配的字段,如

if AdoQuery1.Locate('CountryCode;Surname', VarArrayOf(['US', 'Smith']), []) then