Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=5469202&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 01:34:42 2016
Кодировка: Windows-1251
[mysql] выбрать разные значения из таблицы - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  [mysql] выбрать разные значения из таблицы
      02.12.2006 23:47
 

Задача такая - надо выбрать из таблицы уникальные значения и записать их в другую таблицу. Проблема в том, что исходная таблица содержит 100млн записей и мускл выдает ошибку
code:
ERROR 126 (HY000): Incorrect key file for table '/var/tmp/#sql_d575_0.MYI'; try to repair it
при тривиальном способе переноса.



Чужой код - потемки (с)
Robinzon
Дракоша

Рег.: 28.09.2003
Сообщений: 5510
Рейтинг: 2851
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      02.12.2006 23:54
 

Ну переноси по частям и проставляй признак "запись обработана".



kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  Re: [mysql] выбрать разные значения из таблицы [re: Robinzon]
      02.12.2006 23:58
 

В ответ на:

Ну переноси по частям и проставляй признак "запись обработана".



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



Чужой код - потемки (с)
Robinzon
Дракоша

Рег.: 28.09.2003
Сообщений: 5510
Рейтинг: 2851
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      03.12.2006 00:05
 

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

С такими большими таблицами не работал, там что банальный select distinct при инсерте не работает?



kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  Re: [mysql] выбрать разные значения из таблицы [re: Robinzon]
      03.12.2006 00:16
 

Ну вот я же и написал, что ошибку выдает. Вначале думает часа 2, потом - выдает ошибку.



Чужой код - потемки (с)
Robinzon
Дракоша

Рег.: 28.09.2003
Сообщений: 5510
Рейтинг: 2851
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      03.12.2006 00:21
 

Тогда частями. Напиши процедуру и вечерком запусти, к утру все сделает.



kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  Re: [mysql] выбрать разные значения из таблицы [re: Robinzon]
      03.12.2006 00:32
 

Ну придется видимо так и поступить. К утру - оптимистично, оптимистично... Я когда переносил эту таблицу с другого сервака, она за ночь заполнялась только банальными инсертами, а тут будет много поиска.
Но через неделю наверняка.

С такой процедурой пока не спешу, так что вопрос по-прежнему актуален.



Чужой код - потемки (с)
Robinzon
Дракоша

Рег.: 28.09.2003
Сообщений: 5510
Рейтинг: 2851
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      03.12.2006 01:14
 

Наверняка в этой таблице процентов 70 данных уже неактуальны.
Раз уж ты часто с этой таблицей возишься, не думал неактуальные данные в архивную таблицу переложить?



mmCleric

Рег.: 19.09.2004
Сообщений: 459
Из: Здесь
Рейтинг: 263
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      03.12.2006 03:04
 

1) Тебе надо ее починить, у тебя индекс побился. REPAIR TABLE в консоли mysql'я или myisamchk из shell'а.
2) Могу предложить сделать во второй таблице unique ключ, и переносить все-таки кусками. Хотя бы скорость сможешь оценить выполнения.
3) Такие большие объемы в MyISAM хранить страшновато. Лучше уж InnoDB, хотя конечно, все от специфики задачи зависит.



-Ofun
kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  Re: [mysql] выбрать разные значения из таблицы [re: mmCleric]
      03.12.2006 16:54
 

1) sql_d575_0.MYI - это как я понимаю временная таблица, которая автоматически создается когда я делаю select distinct. Поэтому как починить ее - непонятно.
2) насчет unique ключа - ну есть id записи, который уникален. Ну и что? Мне же все равно нужно при выборе конкретного занчения проверить его уникальность по всей таблице. Я просто не понимаю, как реализовать перенос по частям.
Можно, как вариант сделать поле, которое содержит 1ю букву в том поле, которое должно быть уникально - тогла будет несколько групп записей, которые точно уникальны. Можно по ним переносить
3) опять таки. Исходные данные в myisam. Но глюк-то возникает при создании/обработке временной таблицы, которую непонятно как контролировать.



Чужой код - потемки (с)
mmCleric

Рег.: 19.09.2004
Сообщений: 459
Из: Здесь
Рейтинг: 263
  Re: [mysql] выбрать разные значения из таблицы [re: kdmitrie]
      03.12.2006 17:00
 

1) Ага, точно, это я невнимательно посмотрел.
2) Нет, я имел в виду такое:
code:
> 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) Угу.



-Ofun
kdmitrie
member

Рег.: 07.12.2005
Сообщений: 181
Из: нутри
Рейтинг: 35
  Re: [mysql] выбрать разные значения из таблицы [re: mmCleric]
      03.12.2006 17:11
 

Да, во 2м пункте указан способ, который не может не работать. Если не по 1 млн. разбивать, а еще мельче, то когда-то начнет получаться. Спасибо.



Чужой код - потемки (с)
Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в