Регистрация  |  Вход

SELECT COUNT()

Давно хотел эту тему поднять.

Вот такая замечательная конструкция SELECT COUNT() позволяет посчитать количество записей.
НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей.
Теперь самое интересное. Лимит у нас 50 000 на запрос, как посчитать количество всех записей в базе если их например будет 250 000?
Пока вопрос чисто теоретический, пока нет времени воспроизвести.
Кто сталкивался с такой задачей, поделитесь опытом.

Давно хотел эту тему поднять.

Вот такая замечательная конструкция SELECT COUNT() позволяет посчитать количество записей.
НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей.
Теперь самое интересное. Лимит у нас 50 000 на запрос, как посчитать количество всех записей в базе если их например будет 250 000?
Пока вопрос чисто теоретический, пока нет времени воспроизвести.
Кто сталкивался с такой задачей, поделитесь опытом.

Dmitry Shnyrev
Давно хотел эту тему поднять.

Вот такая замечательная конструкция 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 
Проблема в том что это как-то кривовато да и не наложишь условий на запрос

Dmitry Shnyrev
НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей.

я не знал! совсем не удобно.

плюс я заметил, что COUNT() отказывается считать если в условие есть шифрованные поля. Например COUNT() ... where шифрПоле__с != null

предполагаю, что шифрПОля - это вообще отдельная тема.

[quote="Dmitry Shnyrev"]НО данная конструкция ест лимиты, т.е. если вернуло =1000 то это равносильно тому чтобы получили из базы 1000 записей. [/quote]

я не знал! совсем не удобно.

плюс я заметил, что COUNT() отказывается считать если в условие есть шифрованные поля. Например  COUNT() ... where шифрПоле__с != null

предполагаю, что шифрПОля - это вообще отдельная тема.

wilder
Использую такие вещи чисто для сбора статистики и только в батчах.

Запускаешь батч по всем записям - лимит у батча
Maximum number of records returned for a Batch Apex query in Database.QueryLocator - 50 million

и накручиваешь счетчик?

[quote="wilder"]Использую такие вещи чисто для сбора статистики и только в батчах.[/quote]
Запускаешь батч по всем записям - лимит у батча
[quote]Maximum number of records returned for a Batch Apex query in Database.QueryLocator - 50 million[/quote]
и накручиваешь счетчик?