在数据库中快速定位 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
我有一个大约有 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