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

时间:2016-06-28 09:59:19

标签: kendo-ui progress-4gl openedge

我目前正在开发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毫秒,使得网格感觉非常缓慢。这也是一个非常低的页面大小!

这里显而易见的解决方案是:

  • 缓存记录数量:我没有权限进行数据库更改,并且需要更新旧系统以保持同步,所以我觉得这会打开一群蠕虫。
  • 以异步方式获取记录数:如果您未在原始请求中返回总计the Kendo grid will only let you get it through a synchronous request,我无法想象这将为用户体验带来奇迹。

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

1 个答案:

答案 0 :(得分:1)

不幸的是,这仍然是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?