копирование больших объемов данный в MySQL как?

Тема в разделе "Базы данных", создана пользователем Juri, 25 ноя 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    собственно такой вопрос.
    время от времени, довольно часто приходиться переносить большие объемы данных в пределах одной таблицы, из поля в поле. например из url в url_tmp и наоборот. этот процес создает не плоху нагрузку на сервак. сейчас это все крутиться у мнея дома на локальном серваке, но учитывая его можношсть и то как он грузиться во время процесса, я не могу это все выложить в инет.

    кто может подсказать как это сделать с наименьшими затратами ресурсов.

    искал в мануале ничего не нашол, может криво искал заранее извеняюсь.
     
  2. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Что-то типа INSERT INTO url_temp VALUES(SELECT * FROM url);
     
  3. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197

    а можно по подробнее?
     
  4. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    Код:
    UPDATE tab SET url_tmp = url
    что бы снизить нагрузку и ускорить процесс, добавь индексы для url и url_tmp

    зы.. а лучше даже так (если таблица большая, и кто то может туда всунуться с записью в момент обновления:(
    Код:
    LOCK TABLES tab WRITE;
    UPDATE tab SET url_tmp = url;
    UNLOCK TABLES;
    
     
  5. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    ИМХО неграмотно спроектирована логика, раз необходимо переносить из одного столбца в другой.
    А раз уж так получилось то можежет проще в скрипте?
    наверняка в таблице есть flag по кторому вы и делали
    UPDATE SET .... WHERE flag
    так может проще $url = ($row['flag']=='значение') ? $row['url'] : $row['url_tmp'];
    а уж если и это не подходит то сделайте общий индекс на эти 2 поля и потом по крону запускайте ваш update в то время когда малоактивен сервер.

    Удачи
     
  6. lexesv

    lexesv

    Регистр.:
    15 ноя 2006
    Сообщения:
    219
    Симпатии:
    103
    не совсем понятен процесс переноса, как ты его описал
    попробуй поэксперементировать с временными таблицами

    это только пример - может сможешь его приспособить под свои нужды

    Код:
    --Создание копии таблицы  во временной таблице
    CREATE TEMPORARY TABLE bad_temp AS (SELECT url, url_tmp FROM contents_site);
     
  7. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    самое простое через update и временные таблицы. Как правило перенос в пределах одной таблицы - действие разовое и нагрузки можно себе позволить
     
  8. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    да зачем дополнительно создавать временную таблицу, если она и так создается субд при простом update однго столбца из другого?.. к чему вообще этот огород, если есть абсолютно тривиальный способ сделать копию?..
     
  9. zack666

    zack666 Постоялец

    Регистр.:
    10 дек 2007
    Сообщения:
    85
    Симпатии:
    8
    Если это нужно делать единоразово, можешь написать прогу на delphi/builder для работой с бд, считать данные с БД, потом добавить их в нужный столбец. Так как это будет делаться удаленно, нагрузка на сервер будет меньшей, я думаю.
     
  10. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    Жесть! :tcl:
     
Статус темы:
Закрыта.