1

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

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

如何覆盖记录数计数器?

谢谢,

4

1 回答 1

1

首先,这是众所周知的问题COUNT(*)。如果只需要获取数据库中某个特定表的行数,那么可以非常轻松快速地获取信息

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(*)返回与上述 SQL 语句或其他一些紧密变体相同的值。

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

total另一端将使用服务器响应的属性来设置lastpagejqGrid的参数,该参数将用于验证是否启用寻呼机的“下一页”和“最后一页”按钮。你能做的是

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

或者,您可以返回任何其他值Number.MAX_VALUE,例如或最大整数9007199254740992(2 53,请参阅答案)。

于 2015-05-22T14:02:22.060 回答