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, см. Ответ).

Другие вопросы по тегам