быстрая сортировка 1 миллиарда строк по одному столбцу varchar в MYSQL - PullRequest
0 голосов
/ 08 июня 2011

У меня в MYSQL хранится 1 миллиард строк, мне нужно вывести их в алфавитном порядке по столбцу varchar, что является наиболее эффективным способом решения этой проблемы.разрешено использование других утилит linux, таких как sort awk.

Ответы [ 3 ]

2 голосов
/ 08 июня 2011

MySQL может обрабатывать миллиард строк. Эффективность зависит от 3 основных факторов: буферов, индексов и объединений.

Некоторые предложения:

Попробуйте вписать набор данных, с которым вы работаете, в память

Обработка в памяти происходит намного быстрее, и у вас есть целая куча проблем, которые вы решаете, делая это. Используйте несколько серверов для размещения частей набора данных. Сохраните часть данных, с которыми вы собираетесь работать, во временной таблице и т. Д.

Предпочитать полное сканирование таблиц индексным доступам

Для больших наборов данных полное сканирование таблицы часто выполняется быстрее, чем сканирование диапазона и другие типы поиска индекса. Даже если вы посмотрите на 1% или на строки или меньше, полное сканирование таблицы может быть быстрее.

Избегать объединения с большими таблицами

Объединение больших наборов данных с использованием вложенных циклов очень дорого. Постарайся избежать этого. Соединения с меньшими таблицами - это нормально, но вы можете предварительно загрузить их в память перед объединением, поэтому для заполнения кэшей не требуется случайный ввод-вывод.

Помните об ограничениях MySQL, которые требуют особой осторожности при работе с большими наборами данных. В MySQL запрос выполняется как один поток (за исключением MySQL Cluster), и MySQL выдает запросы ввода-вывода один за другим для выполнения запроса, что означает, что если время выполнения одного запроса является вашей проблемой, многие жесткие диски и большое количество процессоров не помогут .

Иногда полезно вручную разбить запрос на несколько, выполнить параллельно и агрегировать результирующие наборы.

Вы не дали много информации о вашей настройке или наборе данных, но это должно дать вам пару подсказок о том, на что следует обратить внимание. По моему мнению, наличие (должным образом настроенной) базы данных отсортирует это для вас быстрее, чем делать это программно, если у вас нет особых потребностей, не упомянутых в вашем посте.

1 голос
/ 08 июня 2011

Вы только что попытались проиндексировать столбец и вывести его?Я бы попробовал это сначала, чтобы увидеть, было ли выступление неадекватным, прежде чем стать экзотическим.

0 голосов
/ 08 июня 2011

Это зависит от того, как вы определяете эффективность.CPU / Memory / IO / Time / Coding Effort.Что важно в этом случае?

"select * from big_table order by the_varchar_column" Это, вероятно, наиболее эффективное использование ресурсов разработчика.Добавление индекса может ускорить его работу.

...