MySQL может обрабатывать миллиард строк. Эффективность зависит от 3 основных факторов: буферов, индексов и объединений.
Некоторые предложения:
Попробуйте вписать набор данных, с которым вы работаете, в память
Обработка в памяти происходит намного быстрее, и у вас есть целая куча проблем, которые вы решаете, делая это. Используйте несколько серверов для размещения частей набора данных. Сохраните часть данных, с которыми вы собираетесь работать, во временной таблице и т. Д.
Предпочитать полное сканирование таблиц индексным доступам
Для больших наборов данных полное сканирование таблицы часто выполняется быстрее, чем сканирование диапазона и другие типы поиска индекса. Даже если вы посмотрите на 1% или на строки или меньше, полное сканирование таблицы может быть быстрее.
Избегать объединения с большими таблицами
Объединение больших наборов данных с использованием вложенных циклов очень дорого. Постарайся избежать этого. Соединения с меньшими таблицами - это нормально, но вы можете предварительно загрузить их в память перед объединением, поэтому для заполнения кэшей не требуется случайный ввод-вывод.
Помните об ограничениях MySQL, которые требуют особой осторожности при работе с большими наборами данных. В MySQL запрос выполняется как один поток (за исключением MySQL Cluster), и MySQL выдает запросы ввода-вывода один за другим для выполнения запроса, что означает, что если время выполнения одного запроса является вашей проблемой, многие жесткие диски и большое количество процессоров не помогут .
Иногда полезно вручную разбить запрос на несколько, выполнить параллельно и агрегировать результирующие наборы.
Вы не дали много информации о вашей настройке или наборе данных, но это должно дать вам пару подсказок о том, на что следует обратить внимание. По моему мнению, наличие (должным образом настроенной) базы данных отсортирует это для вас быстрее, чем делать это программно, если у вас нет особых потребностей, не упомянутых в вашем посте.