Давно хотел эту тему поднять.
Вот такая замечательная конструкция SELECT COUNT() позволяет посчитать количество записей.
НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей.
Теперь самое интересное. Лимит у нас 50 000 на запрос, как посчитать количество всех записей в базе если их например будет 250 000?
Пока вопрос чисто теоретический, пока нет времени воспроизвести.
Кто сталкивался с такой задачей, поделитесь опытом.
Давно хотел эту тему поднять. Вот такая замечательная конструкция SELECT COUNT() позволяет посчитать количество записей. НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей. Теперь самое интересное. Лимит у нас 50 000 на запрос, как посчитать количество всех записей в базе если их например будет 250 000? Пока вопрос чисто теоретический, пока нет времени воспроизвести. Кто сталкивался с такой задачей, поделитесь опытом.
Использую такие вещи чисто для сбора статистики и только в батчах.
[quote="Dmitry Shnyrev"]Давно хотел эту тему поднять. Вот такая замечательная конструкция SELECT COUNT() позволяет посчитать количество записей. НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей. Теперь самое интересное. Лимит у нас 50 000 на запрос, как посчитать количество всех записей в базе если их например будет 250 000? Пока вопрос чисто теоретический, пока нет времени воспроизвести. Кто сталкивался с такой задачей, поделитесь опытом.[/quote] Использую такие вещи чисто для сбора статистики и только в батчах.
Как вариант (правда не очень крутой)
Сделать какой-то кастомный объект с количеством. (id/object_name/count)
И повесить триггер на интерсующие нас события (insert/delete) и обновлять информацию в этом объекте.
Хотя вариант кажется адовым костылём.
Если что, сам таким не занимался. Может уже есть какой-то "официальный" способ?
Как вариант (правда не очень крутой) Сделать какой-то кастомный объект с количеством. (id/object_name/count) И повесить триггер на интерсующие нас события (insert/delete) и обновлять информацию в этом объекте. Хотя вариант кажется адовым костылём. Если что, сам таким не занимался. :D Может уже есть какой-то "официальный" способ?
Инфа о количестве записей объектов представлена в Storage Usage, как вариант можно сделать запрос https://<instance>.salesforce.com/setup/org/orgstorageusage.jsp?id=<Your Org Id> и распарсить ответ. Вот ссылка по теме: http://salesforce.stackexchange.com/questions/9474/can-we-query-the-info-from-data-management-storage-usage-through-soap-api
Проблема в том что это как-то кривовато да и не наложишь условий на запрос
Инфа о количестве записей объектов представлена в Storage Usage, как вариант можно сделать запрос https://<instance>.salesforce.com/setup/org/orgstorageusage.jsp?id=<Your Org Id> и распарсить ответ. Вот ссылка по теме: http://salesforce.stackexchange.com/questions/9474/can-we-query-the-info-from-data-management-storage-usage-through-soap-api Проблема в том что это как-то кривовато да и не наложишь условий на запрос
я не знал! совсем не удобно.
плюс я заметил, что COUNT() отказывается считать если в условие есть шифрованные поля. Например COUNT() ... where шифрПоле__с != null
предполагаю, что шифрПОля - это вообще отдельная тема.
[quote="Dmitry Shnyrev"]НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей. [/quote] я не знал! совсем не удобно. плюс я заметил, что COUNT() отказывается считать если в условие есть шифрованные поля. Например COUNT() ... where шифрПоле__с != null предполагаю, что шифрПОля - это вообще отдельная тема.
[quote="wilder"]Использую такие вещи чисто для сбора статистики и только в батчах.[/quote] Запускаешь батч по всем записям - лимит у батча [quote]Maximum number of records returned for a Batch Apex query in Database.QueryLocator - 50 million[/quote] и накручиваешь счетчик?