由于与我们的DB COUNT(*)的糟糕表现(当我们处理50M记录),我们不希望在我们检索记录每片回到返回记录总数。 相反,我们希望没有它的工作。 我可以设置的记录总数为MAX_INT为内jsonReader此事:{记录:MAX_INT},但我想使这个更好。
我想要做的是设置记录MAX_INT当电网负载(这部分我知道如何),但在平行启动的背景呼吁COUNT(*),最终当真正的计数器将被检索,我想覆盖与真正的计数器,它是记录的实数MAX_INT。
如何重写记录计数器的数量?
谢谢,
由于与我们的DB COUNT(*)的糟糕表现(当我们处理50M记录),我们不希望在我们检索记录每片回到返回记录总数。 相反,我们希望没有它的工作。 我可以设置的记录总数为MAX_INT为内jsonReader此事:{记录:MAX_INT},但我想使这个更好。
我想要做的是设置记录MAX_INT当电网负载(这部分我知道如何),但在平行启动的背景呼吁COUNT(*),最终当真正的计数器将被检索,我想覆盖与真正的计数器,它是记录的实数MAX_INT。
如何重写记录计数器的数量?
谢谢,
首先是它的众所周知的问题与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(*)
你可以使用records
或total
定义为功能,并且不返回任何records
或total
从服务器。 该records
是不是在大多数情况下,重要的。 如果将显示在寻呼机viewrecords: true
选项使用。 您可以使用默认viewrecords: false
,并与设置没有问题records
在服务器响应字段。
的total
服务器响应的属性将在另一侧上被用来设置lastpage
的jqGrid,这将被用于验证“下一页”和寻呼机的“末页”按钮是否将被启用与否的参数。 你可以做的是
jsonReader: {
total: function (response) {
return parseInt(response.page) + 1;
}
}
可替代地可以返回像任何其他值Number.MAX_VALUE
例如或最大整数9007199254740992
(2 53,参见答案 )。