Free jqGrid 4.8.0 - Настройка общего количества перезагрузок пейджинговой сетки
Из -за плохой производительности count(*) с нашей БД (когда мы имеем дело с 50M записями), мы не хотим возвращаться к общему количеству записей в каждом срезе записей, которые мы получаем. Вместо этого мы хотим работать без него. Я мог бы установить общее количество записей равным MAX_INT в этом отношении в jsonReader:{records: MAX_INT}, но я хочу сделать это лучше.
Что я хотел бы сделать, это установить записи для MAX_INT, когда сетка загружается (ту часть, которую я знаю, как), но параллельно инициировать вызов для счетчика (*) на заднем плане, в конце концов, когда будет получен реальный счетчик, я хотел бы переопределить MAX_INT с реальным счетчиком, который является реальным количеством записей.
Как переопределить счетчик количества записей?
Спасибо,
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(*)
ты можешь использовать 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
(253, см. Ответ).