Ответ 1
Я думаю, это зависит от столбца, который вы выбрали для заказа BY. Если целое число, это другой алгоритм, чем для строк. Другое предположение состоит в том, что наличие или отсутствие индексов для этого столбца также будет иметь жизненно важное значение.
Это алгоритм для упорядочения текста в Mysql.
Оригинальный алгоритм сортировки файлов работает следующим образом: прочитать все строки в соответствии с ключ или путем сканирования таблицы. Ряды, которые делают не совпадают с предложением WHERE пропускаются. Для каждой строки сохраните пару значения в буфере (ключ сортировки и указатель строки). Размер буфер является значением Системная переменная sort_buffer_size. когда буфер полон, запустите qsort (быстрая сортировка) и сохранить результат во временном файле. Сохранить указатель на отсортированный блок. (Если все пары подходят в буфер сортировки, без временного файл создан.) Повторите предыдущее шаги, пока все строки не будут прочитаны. Сделайте мульти-слияние до MERGEBUFF (7) регионы в один блок в другом временный файл. Повторяю пока все блоки из первого файла находятся в второй файл. Повторите следующее пока есть меньше чем MERGEBUFF2 (15) блоков осталось. На последнем мульти-слияние, только указатель на строка (последняя часть ключа сортировки) записывается в файл результатов. Прочитайте строки в отсортированном порядке с помощью строки указатели в файле результатов. к оптимизировать это, мы читаем в большом блоке указателей строк, сортировать их и использовать их читать строки в отсортированном порядке в буфер строк. Размер буфер является значением системная переменная read_rnd_buffer_size. Код для этого шага находится в sql/records.cc исходный файл.