免费 jqGrid 4.8.0 - 设置分页总数 post grid reload

Free jqGrid 4.8.0 - Setting the total number of paging post grid reload

由于我们的数据库在 count(*) 上的性能不佳(当我们处理 50M 条记录时),我们不想 return 返回每个记录片中的记录总数取回。相反,我们想在没有它的情况下工作。我可以将 jsonReader:{records: MAX_INT} 中的记录总数设置为 MAX_INT,但我想让它变得更好。

我想做的是在网格加载时为 MAX_INT 设置记录(我知道那部分),但同时在后台发起对 count(*) 的调用,最终当检索到真实计数器时,我想用真实计数器覆盖 MAX_INT,即真实记录数。

如何覆盖记录数计数器?

谢谢,

首先是 COUNT(*) 的众所周知的问题。如果只需要 某些特定 table 数据库的行数,那么可以非常容易且非常快速地获取信息

SELECT rows
FROM sys.partitions
WHERE index_id IN (0, 1)
    AND object_id = OBJECT_ID('dbo.Tablename')

在更常见的情况下(如果数据不仅在一个分区中),应该使用 SUM(rows) 而不是 rows。参见

我想可以用同样的方式使用sys.dm_db_partition_stats

SELECT row_count
FROM sys.dm_db_partition_stats
WHERE index_id IN (0, 1) AND object_id = OBJECT_ID('dbo.Tablename')

您可以检查您的数据库并测试 COUNT(*) return 是否与上述 SQL 语句或其他一些近似变体具有相同的值。

独立于 COUNT(*) 的问题,您可以使用定义为函数的 recordstotal,不要 return 任何 recordstotal 来自服务器。 records 在大多数情况下根本不重要。如果使用 viewrecords: true 选项,它将显示在寻呼机上。您可以使用默认 viewrecords: false 并且在服务器响应中设置 records 字段没有问题。

服务器响应的total属性会在对方设置jqGrid的lastpage参数,用来验证是否"Next Page"寻呼机的 "Last Page" 按钮是否启用。你能做的是

jsonReader: {
    total: function (response) {
        return parseInt(response.page) + 1;
    }
}

或者,您可以 return 任何其他值,例如 Number.MAX_VALUE 或最大整数 9007199254740992(253,请参阅 the answer).