[mysql] выбрать разные значения из таблицы
Ну переноси по частям и проставляй признак "запись обработана".
Ну переноси по частям и проставляй признак "запись обработана".В итоге должен быть набор уникальных записей. Как обеспечить уникальность при переносе по частям? Обрабатывать за 1 шаг 1 запись и сравнивать со всеми, что уже есть в таблице? Подозреваю, что это будет очень медленно.
Если да, то обрабатывай такими частями и проверяй, что таких записей еще нет в новой таблице.
Если не можешь, то построчно и признак проставляй.
С такими большими таблицами не работал, там что банальный select distinct при инсерте не работает?
Ну вот я же и написал, что ошибку выдает. Вначале думает часа 2, потом - выдает ошибку.
Тогда частями. Напиши процедуру и вечерком запусти, к утру все сделает.
Но через неделю наверняка.
![](/images/graemlins/smile.gif)
С такой процедурой пока не спешу, так что вопрос по-прежнему актуален.
Раз уж ты часто с этой таблицей возишься, не думал неактуальные данные в архивную таблицу переложить?
2) Могу предложить сделать во второй таблице unique ключ, и переносить всё-таки кусками. Хотя бы скорость сможешь оценить выполнения.
3) Такие большие объёмы в MyISAM хранить страшновато. Лучше уж InnoDB, хотя конечно, всё от специфики задачи зависит.
2) насчет unique ключа - ну есть id записи, который уникален. Ну и что? Мне же все равно нужно при выборе конкретного занчения проверить его уникальность по всей таблице. Я просто не понимаю, как реализовать перенос по частям.
Можно, как вариант сделать поле, которое содержит 1ю букву в том поле, которое должно быть уникально - тогла будет несколько групп записей, которые точно уникальны. Можно по ним переносить
3) опять таки. Исходные данные в myisam. Но глюк-то возникает при создании/обработке временной таблицы, которую непонятно как контролировать.
2) Нет, я имел в виду такое:
> CREATE TABLE target LIKE source;
> ALTER TABLE target ADD UNIQUE(distinct_field);
> INSERT IGNORE target SELECT distinct_field FROM source WHERE id > step * 1000000 AND id <= (step + 1) * 1000000;
Последний пункт повторять по всем step от 0 до сколько потребуется.
3) Угу.
Да, во 2м пункте указан способ, который не может не работать. Если не по 1 млн. разбивать, а еще мельче, то когда-то начнет получаться. Спасибо.
Оставить комментарий
ghytr00013
Задача такая - надо выбрать из таблицы уникальные значения и записать их в другую таблицу. Проблема в том, что исходная таблица содержит 100млн записей и мускл выдает ошибку при тривиальном способе переноса.