2015-05-22 4 views
1

из-за плохой производительности по счету (*) с нашей БД (когда мы имеем дело с 50-мегапиксельными записями), мы не хотим возвращаться к итогу количество записей в каждом фрагменте записей, которые мы извлекаем. Вместо этого мы хотим работать без него. Я мог бы установить общее количество записей в MAX_INT в этом случае в jsonReader: {records: MAX_INT}, но я хочу сделать это лучше.Free jqGrid 4.8.0 - Установка общего количества перезагрузки сетки пейджинговой почты

Что я хотел бы сделать, это установить записи для 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 (2 см the answer).

+0

Спасибо, Олег, это полезно. Проблема шире, чем просто размер таблицы, так как она зависит от того, где добавлена ​​динамика для этой проблемы. – Tal

+0

@Tal: Ясно, что 'SELECT rows FROM sys.partitions' может помочь только в некоторых очень простых случаях, когда нужно отображать точные данные из одной таблицы. Из-за этого я описал, как использовать функции в 'jsonReader' для предотвращения' COUNT (*) '. Вы пробовали это? – Oleg

+0

Пока нет, но я буду. Похоже на правильное направление. Предположим, я хочу «исправить» счет путем вызова aynax Async, который вернет мне реальный счет позже, как я могу это сделать, не перезагружая сетку снова? – Tal

 Смежные вопросы

  • Нет связанных вопросов^_^