Скажите, что у вас есть таблица с миллионами записей - назовем каждый из них «item». В таблице есть несколько столбцов, включая один булевский столбец - назовем его isProcessed
- и один с адресом электронной почты рабочего, который обрабатывал элемент - назовем его worker
.Как эффективно получать данные и подсчитывать строки за один качели?
Допустим, работник Джон Смит ([email protected]) вызывает событие, которое должно вернуть (1) все необработанные элементы (isProcessed
= ложь), с одной стороны, и (2) числа предметы, обработанные Джоном с другой.
Моя первая идея состояла в том, чтобы просто выполнить два запроса, один из которых выбирает элементы, а второй - все элементы, обработанные Джоном.
Но это кажется довольно неэффективным, потому что мне нужно повторять два раза по всем миллионам записей. Я мог бы также перебирать каждую строку и одновременно проверять оба столбца isProcessed
и worker
, поэтому я не запускаю таблицу дважды.
Что касается производительности кода, какой подход более эффективен в SQL? Или, в общем, какой подход рекомендуется?
Немного. Является ли «(1)» предметом, назначенным Джону, но еще не обработанным? Или это подсчет? Или это все необработанные предметы (и «Джон» не имеет отношения к «(1)».) Просьба уточнить. –
@ RickJames, нет, «(1)» и «(2)» просто указывают в этом вопросе, что нужно сделать две вещи. Цифры не имеют никакого отношения к самой операции (ей). – jaySon
Это все необработанные предметы для Джона? Или все необработанные предметы для всех. (Решение радикально отличается.) –