"Существует ли установленный (волшебный?) Способ решения такой проблемы?" - Вы спрашиваете о нескольких вещах, которые я потратил много времени на совершенствование.
«сотни миллионов записей ... отчет» и «отчет могут быть отсортированы по различным столбцам» - с таблицей «Сводка», которая может выполняться намного быстрее: http://mysql.rjweb.org/doc.php/summarytables. И сводная таблица помогает с сортировкой.
«Индексы созданы для всех соответствующих столбцов» - извините за мой цинизм, но я обнаружил, что эта фраза означает, что у вас есть набор из одного столбца INDEXes
, но вы не узнали о пользе подходящих » составные индексы. http://mysql.rjweb.org/doc.php/index_cookbook_mysql и http://mysql.rjweb.org/doc.php/index1
«использование LIMIT и OFFSET» - вот почему это очень неэффективно: http://mysql.rjweb.org/doc.php/pagination. Я не вижу OFFSET
необходимого для решения вашей проблемы. «Запоминание того, где вы остановились», может помочь в разбивке на , первоначально , создать сводную таблицу (таблицы).
«соединение с БД прекращается» - приведенные выше советы должны сделать это достаточно быстро, чтобы избежать этой проблемы. Если нет, укажите SHOW CREATE TABLE
, SELECT
и, возможно, другие сведения.
"Чанкинг" - вот советы по чанкингу, но я не думаю, что это решение для рассматриваемой проблемы: http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks
"сотни миллионов записей ... в одной таблице" - не проблема. Мои советы нацелены на этот размер.
"нет разделения" - хорошо. Мне не придется тратить время на то, чтобы убедить вас, что разделение вряд ли поможет: http://mysql.rjweb.org/doc.php/partitionmaint
Вы выиграли приз. Я не думаю, что когда-либо указывал на 6 моих блогов, чтобы ответить на один вопрос.