获取查询记录总数的最快方法
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 毫秒,使网格感觉非常缓慢。这也是一个非常小的页面大小!
这里明显的解决方案是:
- 缓存记录数:我没有更改数据库的权限,需要更新遗留系统才能保持同步,所以我感觉这会打开一堆蠕虫。
- 异步获取记录数:如果你不return原始请求中的总数,the Kendo grid will only let you get it through a synchronous request,我不能imagine 将为用户体验创造奇迹。
所以,我的问题是,是否有更快的方法来获取查询的记录总数?
不幸的是,这在 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?
我目前正在 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 毫秒,使网格感觉非常缓慢。这也是一个非常小的页面大小!
这里明显的解决方案是:
- 缓存记录数:我没有更改数据库的权限,需要更新遗留系统才能保持同步,所以我感觉这会打开一堆蠕虫。
- 异步获取记录数:如果你不return原始请求中的总数,the Kendo grid will only let you get it through a synchronous request,我不能imagine 将为用户体验创造奇迹。
所以,我的问题是,是否有更快的方法来获取查询的记录总数?
不幸的是,这在 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?