0

在 Firebird/Interbase 数据库中,我们有TIBQueryTIBTableTIBDataSet,它们具有FetchAll计算数据集有多少行的方法。如果我们不调用该方法,这些数据集只会注册为“总”用户已经通过 aTDBGrid或看到的行数TDBNavigator。这个“总数”可以通过调用这些数据集的 `RecordCount' 方法来检索。

另一种(更有效)获取实际总行数的方法是获取单独的数据集并执行一些SELECT COUNT(*) FROM TABLE_NAME并应用我们喜欢的任何过滤器。到目前为止还可以。

但是现在我正在通过 ZeosLib 使用 MySQL,我想知道是否需要麻烦才能在内存上进行第二次查询。

我们知道 ZeosLib 进行查询,它可能会在内部返回该查询的统计信息,其中包括返回的行数。

ZeosLib 是否将该信息放入其中,RecordCount或者它是否与 Interbase 组件完全一样?

4

1 回答 1

1
  1. Zeos 返回已获取记录的数量。它不考虑任何应用的过滤器,并且FetchAll在返回之前不考虑RecordCount
  2. SELECT COUNT(*) ...不是“更有效率”,因为它会创建额外的服务器工作负载,有时可能等于执行原始查询的工作负载。
  3. 一般来说,数据访问库可以提供 3 种记录计数计算模式:获取的行数、可见行数(如第一次,但在应用过滤器之后)和SELECT COUNT(*). FetchAll 或不 FetchAll 将更好地明确控制。这就是在AnyDAC更多)中完成此操作的方式。
于 2012-08-22T07:03:53.483 回答