Алгоритм сортировки SQL Server

Существует так много алгоритмов сортировки, но я хочу знать, какой алгоритм используется в SQL Server, когда мы используем Order by и без Order by.

Ответы

Ответ 1

Я думаю, это зависит от столбца, который вы выбрали для заказа BY. Если целое число, это другой алгоритм, чем для строк. Другое предположение состоит в том, что наличие или отсутствие индексов для этого столбца также будет иметь жизненно важное значение.

Это алгоритм для упорядочения текста в Mysql.

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

Ответ 2

Если вы не используете ORDER BY, тогда не будет подразумеваемого или естественного порядка. Таким образом, никакого алгоритма. Это относится к большинству СУБД. Только ORDER BY выдаст любой заказ результатов.

Когда вы используете ORDER BY, он следует указанному вами списку столбцов, asc/desc, collation, expressions и т.д. Единственное неинтуитивное правило, о котором я могу думать, - это "NULLs first" для столбца, но в противном случае сортировки просты в SQL Server.

Ответ 3

Да, Elzo прав, SQL Server (и многие другие РСУБД) использует несколько различных и сложных алгоритмов сортировки. Они нацелены на достижение баланса между использованием памяти, средним временем отклика при сохранении высоких уровней ресурса concurrency. В определенной ситуации выбор алгоритма основан на используемых типах данных, размере сортируемых данных или количестве указанных ключей сортировки и т.д.

Обратитесь к этой теме: Какие алгоритмы используют SQL?

Ответ 4

Существуют две разные логики сортировки, используемые SQL Server для обработки сортировки! Первый - это быстрый вид, а другой - сортировка слияния. Он начинает сортировать по памяти с помощью алгоритма быстрой сортировки, но обратите внимание, что для этого требуется объем памяти не менее 200% от размера входных строк. Теперь, если грант памяти превышен (даже одним байтом), он разливает весь непосредственный вид и оставшийся вид на диск. Затем он завершит сортировку на диске, используя алгоритм сортировки слиянием.