Назрела необходимость потюнить текущий код, и выбор пал на обработку результатов запроса в процессе получения пакетов от MySQL.
Т.е. большинство клиентских либ собирают от MySQL результат полностью, и передают его на обработку в пользовательский код, а хочется обрабатывать сразу по мере поступления.
Вопрос состоит в том: как быть увереным что MySQL передает часть результата сразу по мере его получения или же ждет результат и отправляет его только тогда, когда он полностью найден (тупой это путь, но проверить надо) ?
Может есть какие настройки непосредственно в MySQL связанные с партиционированием результирующих данных ?
Нет, Erlang. Просто сам драйвер написан на Erlang и я могу его модифицировать. По коду видно, что он собирает результат в один список, по мере прихода пакетов, только не понятно как часто и по какому условию эти пакеты приходят.
При указании параметра SQL_BUFFER_RESULT MySQL будет заносить результат во временную таблицу. Таким образом MySQL получает возможность раньше снять блокировку таблицы; это полезно также для случаев, когда для посылки результата клиенту требуется значительное время.
И ещё:
Параметр SQL_BIG_RESULT можно использовать с GROUP BY или DISTINCT, чтобы сообщить оптимизатору, что результат будет содержать большое количество строк. Если указан этот параметр, MySQL при необходимости будет непосредственно использовать временные таблицы на диске, однако предпочтение будет отдаваться не созданию временной таблицы с ключом по элементам GROUP BY, а сортировке данных.
Т.е. я правильно понимаю что по-умолчанию MySQL отправляет результаты пакетами как только они готовы ? Где-бы почитать именно эту фразу в мануале или в сурсах :)
Сергей: Я сам не очень понял. Вроде начинает отправлять обычно когда вся выборка готова, а так начинает отправлять постепенно по мере поступления данных, а что бы не потерять их складывает во временную таблицу. Я ссылку из доков кинул, и больше там по этой теме особо нет, так что если найдёте ещё если не затруднит киньте сюда, было бы интересно тоже узнать подробнее