Алгоритм сортировки SQL Server - PullRequest
16 голосов
/ 04 мая 2011

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

Заранее спасибо ..

Ответы [ 4 ]

2 голосов
/ 04 мая 2011

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

Когда вы используете ORDER BY, он следует заданному вами списку столбцов, asc / desc, объединению, выражениям и т. Д. Единственное неинтуитивное правило, которое я могу придумать, - это «NULLs first» для столбца, но в SQL Server сортировка выполняется просто.

2 голосов
/ 04 мая 2011

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

См. Эту ветку: Какие алгоритмы использует SQL?

2 голосов
/ 04 мая 2011

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

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

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

0 голосов
/ 02 июля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...