获取查询记录总数的最快方法

Fastest way to get the total number of records for a query

我目前正在 OpenEdge 中开发 REST API(使用新的面向对象的 WebSpeed 处理程序),供 Kendo 网格小部件使用。

我真正苦苦挣扎的一个领域是实现分页 - Kendo 网格需要 API 为其提供记录总数以确定有多少页. The only recommended way I've found of doing it就是做一个PRESELECT查询然后使用NUM-RESULTS,像这样:

CREATE QUERY hQuery.
hQuery:SET-BUFFERS(BUFFER sales_order:HANDLE).
hQuery:QUERY-PREPARE("PRESELECT EACH sales_order WHERE co_no = 1").
hQuery:QUERY-OPEN().
oJson:Add("total", hQuery:NUM-RESULTS).

不出所料,这非常慢 - 对服务器的请求从每页 72 毫秒增加到 500 毫秒,使网格感觉非常缓慢。这也是一个非常小的页面大小!

这里明显的解决方案是:

所以,我的问题是,是否有更快的方法来获取查询的记录总数?

不幸的是,这在 OE 中仍然是一个问题。

提到了缓存,但只有在不应用过滤器时它才会起作用,因为记录总数取决于过滤条件。

您唯一可以提高性能的方法是在 PRESELECT 中包含 FIELDS 选项

hQuery:QUERY-PREPARE("PRESELECT EACH sales_order FIELDS(table_field_here) WHERE co_no = 1").

这是迄今为止你能做的最好的事情,至少是本文推荐的:4GL. WHICH IS THE FASTEST WAY TO COUNT RECORDS IN A TABLE?