Здравствуйте. На днях прочитал о различных алгоритмах сортировки и меня заинтересовал вопрос каким алгоритмом сортируются данные в MySQL, но, к сожалению, я не нашёл ответа на этот вопрос в поиске и решил обратиться с ним к профи. Если кто-то знает каким алгоритмом сортировки пользуется MySQL, пожалуйста расскажите, было бы очень интересно узнать.
Там наверняка комбинация каких-то достаточно сложных алгоритмов, с учётом индексов и прочее. Но в целом люди пользуются базами данных, чтоб НЕ думать о том, каким там алгоритмом сортирует MySQL, а просто писать ORDER BY и радоваться. Там, где имеет смысл задумываться о способах хранения или других механизмов, документация указывает разницу, и как выбрать.
И всё же, хотелось бы узнать какие алгоритмы используются, ведь есть множество типов сортировки: Сортировка пузырьком, Шейкерная сортировка, Сортировка расческой, Сортировка вставками, Сортировка Шелла, Сортировка деревом, и прочие... Я предполагаю используются только несколько предпочтительных алгоритмов. Хотя с другой стороны если взять, к примеру, каждый из алгоритмов сортировки и протестировать, то они будут работать куда медленней алгоритма сортировки в MySQL.
@Raadset Там всё намного сложнее, чем в перечисленных алгоритмах (это всё достаточно простенькие алгоритмы), MySQL при сортировке учитывает очень много всего, чтобы работать эффективно. Я не думаю, что хоть одному человеку на этом форуме приходило в голову шерстить сложнейший исходник mysql, с целью выяснить, а вдруг там сортировка пузырьком Знание этих алгоритмов хорошо, пока ты учишься. Чтоб мозги начали понимать, как составляются алгоритмы. В реальных программах никто и никогда не будет писать пузырьковую сортировку, да вообще думать о сортировке. Нужна сортировка массива - есть usort, ksort и прочее. Нужно отсортировать вывод из БД - есть ORDER BY.
То есть, вы хотите сказать что ни вы, и скорее всего никто на этом форуме, не сможет рассказать в общих чертах как работает эта сортировка? Мне и в голову не приходит как можно осуществить сортировку не сравнивая одно с другим через какой-то цикл.
Поэтому вы и задаете такие нелепые вопросы. СУБД/БД изначально устроена так, чтобы быстро искать. Т.е. в ней используются «избыточные» структурные данные, не относящиеся непосредственно к хранимому контенту. Почитайте про бинарные деревья, хэш-таблицы и т.п. Так что ваши сортировки «чистых» данных плохо соотносятся с тем, как работает СУБД. Можно сказать, что там данные хранятся в уже отсортированном виде
Можешь зайти https://github.com/MariaDB/server/tree/10.9/mysys и почитать комментарии в файлах mf_qsort.c mf_qsort2.c mf_sort.c mf_qsort.c: Код (Text): /* qsort implementation optimized for comparison of pointers Inspired by the qsort implementations by Douglas C. Schmidt, and Bentley & McIlroy's "Engineering a Sort Function". */ Вообще, то что тебя интересует называется "Алгоритмы и структуры данных" В общих чертах выглядит так:
Я не спрашиваю. Но тут от интервьювера зависит, от конторы. Если и спрашивать про алгоритмы, то не про пузырёк, естественно. Вот деревья, графы - это могут спросить скорее, потому что это используется.
Интервьювер строит тех. собеседование в зависимости от того, чем занимается фирма. Если специализируется на несложных сайтах - то нафиг оно там не надо. --- Добавлено --- Вообще, у нас бинарное дерево было лабой на первом курсе
джуну надо уметь писать код, в первую очередь. у тебя именно с этим проблемы - ты не стартуешь. а деревья и другие структуры конечно помогают. человек с широкими знаниями может писать лучший код / более быстрый код / безошибочный код )))