2013-05-30 3 views
0

У меня возникла проблема с загрузкой данных в базе MySQL. хорошо, у меня есть более 37 миллионов случайно сгенерированных кодов (8 цифр).Ввод МАССИВНЫХ данных в MySQL

Я хочу загрузить их в MySQL в определенных таблицах. Что я имею в виду, что я хочу, чтобы отсортировать коды по его начальной букве и загрузить в соответствующей таблице , например: если коды начинается с W, его нужно загрузить в W_codes таблица если начинается коды с , его нужно загрузить в 1_codes таблицы и так далее ...

Я имел C# программу, которая делала сортировки себя и загрузки кодов MySQL, но это занимает более 6-7 часов на 1 миллион кодов.

Есть ли у вас более простая идея, как выполнять сортировку, а затем загружать коды в соответствующей таблице? Размер ограничения на загрузку MySQL .sql составляет 128 МБ.

любые идеи?

+0

интересно - это вставка, или одна вставка для кода –

+0

Почему бы не сгенерировать код в SQL? Должно быть намного быстрее –

+0

Ну, коды уже сгенерированы, и я не могу их изменить, поскольку они отправляются на производство ... Кстати, была некоторая причина, почему я не сгенерировал их в PHP. Вставка - ОДНА Вставка на код, как я предполагаю. один код находится в одной строке, в таблице. –

ответ

4

Я думаю, что коды перегородки таким образом не имеют для меня большого смысла. Разделение времени или геокодирования будет иметь больше смысла.

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

37 миллионов - это не такое большое количество для базы данных. Почему, по-вашему, вам нужно это делать?

Я бы загрузил их все в одну таблицу в базе данных и посмотрел, как она выполняется. Вы не говорите, есть ли в таблице другие значения, если коды являются первичными ключами или что представляют собой предложения WHERE, которые вы используете для доступа к данным. Возможно, вы просто не указали таблицу правильно. Это будет иметь огромное значение во времена запросов.

Являются ли коды статическими и доступными только для чтения? Или вы пишете в этот стол?

Если бы мне пришлось прибегнуть к схеме, подобной той, которую вы описываете, я бы использовал саму базу данных SELECT для секционированных таблиц. Базы данных оптимизированы для такого рода вещей.

+0

Итак, вы имеете в виду, что я бы загрузил все 37 миллионов кодов одним файлом в MySQL, вставлял его в одну таблицу и затем разделял его по первой букве в соответствующих таблицах с помощью SELECT? правильно? это действительно имеет смысл .. P.S. они должны были быть разделены так, как это делают PHP-коды. до этого, когда я сделал, чтобы проверить введенный код в одной таблице с 37 миллионами файлов, он перегрузил сервер. поскольку запросы были более 2000 в день. поэтому через 37 миллионов кодов 2000 раз отставал сервер –

+0

Это одно предложение. Я бы не подумал, что 2000 запросов на столе из 37 миллионов строк будут отставать от любого сервера. Вы должны ПРОВЕРИТЬ ПЛАН в своем запросе и посмотреть, выполняете ли вы ТАБЛИЦУ СКАНИРОВАНИЯ. Если да, добавьте индексы для столбцов в предложениях WHERE. Вы не говорите, является ли таблица транзакционной, доступной только для чтения или прочитанной. Это тоже имеет значение. – duffymo

0

Я бы сделал следующее. Создайте временную таблицу. Вставьте все коды в таблицу temp в одной партии. Запросить возможность вставить в другие таблицы на основе первого символа. Простой, где предложение должно делать трюк, ничего сложного. Не стоит долго останавливаться, это всего лишь 37 миллионов записей.

+0

Да, у меня возникла идея .. , но должен ли все эти коды (строки) иметь специальный формат для вставки в таблицы? –

+0

Не требуется специальный формат. – duffymo

Смежные вопросы