Эквивалент count () в построителе запросов равен QueryBuilder.select().countAll()
. Вместо этого я бы просто перебрал resultSet и увеличил счетчик, так как он будет пролистывать медленнее, в то время как count
выполняет некоторые внутренние операции, которые могут разложить запрос, который может превратиться в тысячи внутренних запросов (очень дорого). Итерирование по resultSet лучше, чем all
, поэтому он не будет пытаться загрузить всю вещь в память, если она вынуждена разбивать на страницы (result> fetchsize).
Использование count
очень дорого, и в некоторых случаях выможно ожидать тайм-аута. Поэтому, особенно если это то, что можно часто вызывать, вы должны избегать этого.
Рассматривали ли вы использование другой таблицы для отслеживания добавленных вами записей? Дополнительный бухгалтерский учет - это больше работы, но он приведет к эффективным запросам.
Если есть TTL или что-то, что затрудняет отслеживание, вы также можете использовать задание (то есть, запустить или выполнить итерацию, как описано выше), чтобыпросто сохраняйте вторую таблицу «count» и просто не обновляйте ее постоянно.