【发布时间】:2011-08-08 11:20:45
【问题描述】:
我想知道最好(阅读:最快)的方法是在 Tquery SQL 语句的结果集中找到一条记录。
到目前为止,我一直在使用 TQuery.Locate,如果我是对的,那是唯一可用于在结果集中搜索的语句。那么我们该如何优化呢?
我有一些想法,但还没有时间在大型数据集上比较它们:
假设我们有一个包含以下字段的表:
Create Table aTable (
ID int,
Name1 varchar(50),
Name2 varchar(50));
还有以下查询:
SELECT ID, Name1, Name2 from aTable
我们想在结果集中通过它的 ID 来定位一条记录
- 如果 aTable 在 ID 上有索引,定位会更快吗?
- 如果我在 SQL 语句中添加“Order By ID”,定位会更快吗?
对此有什么想法吗?
[编辑] 澄清其用途:查询由 Reportbuilder Dataview 执行,然后通过数据管道(即 TQuery.Dataset)提供。在自定义报告中,我需要根据一些更高级别的 ID 遍历管道。所以不使用查询在这里不适用。我只是想知道我上面的任何建议是否会加快速度。
【问题讨论】:
-
Locate 在客户端执行。所以在最坏的情况下,需要首先从数据库中获取整个结果集。如果客户端创建在 WHERE 子句中包含 ID 的 SQL 会快得多,这只会获取一条记录。
-
是否将“按 ID 排序”添加到您的选择并不重要,因为如果 ID 是 PK,那么 DB 引擎将通过 PK 列的索引获取结果行。
-
@Justme - 所以原始表中的索引会对 TQuery.Locate 语句产生影响?
-
@Bascy 我没有这么说。如您所见,没有“order by”的选择与“order by PK column”相同。换句话说,在这种情况下,查询的自然计划与索引读取一样快。是的 - 你应该在 ID 上有索引 - 如果你将 ID 设为 PK,它就会创建
标签: delphi reportbuilder nexusdb