За последние 24 часа нас посетили 24475 программистов и 1656 роботов. Сейчас ищут 882 программиста ...

Что будет быстрее?

Тема в разделе "MySQL", создана пользователем WildZero, 28 апр 2011.

  1. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Стоит задача провести синхронизацию данных двух баз, вернее даже не баз, а таблиц.
    Структура примерно такая:
    |dealer|client|addres|phone|etc

    dealer+client уникально.
    С добавлением недостающих строк вопросов никаких.
    А вот с обновлением информации возник вопрос: как лучше сделать:
    1. Без разбору заменять данные из второй таблицы данными из первой (даже если данные совпадают).
    2. Выбирать строки с различающимися данными и обновлять только их?
    Второй вариант мне кажется более правильным. Но не будет ли он более медленным, поиск по текстовым полям вещь не очень то быстрая.
    Как лучше реализовать подобное?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как часто планируется это делать?
     
  3. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Оба варианта так себе. По хорошему, нужно как-то метить строчки в момент изменения. Как вариант еще - в одельном поле хранить хеши на основе данных и сравнивать их. Но лучше все же метить.
     
  4. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    [sql]INSERT ON EXIST UPDATE[/sql]
     
  5. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    igordata
    Пару раз в сутки. Не чаще.

    MiksIr
    Надо бы. Но возможности такой нет.

    karakh
    Как я понимаю, это первый вариант SQL Запросом?
     
  6. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    сколько записей в таблицах?

    Да, причем уже вместе с инсертом.

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

    Тогда идеальные воплощения первого варианта это вообще

    [sql]DROP TABLE tbl1;
    CREATE TABLE tbl1 SELECT * FROM tbl2;[/sql]

    [sql]TRUNCATE TABLE tbl1;
    INSERT INTO tbl1 SELECT * FROM tbl2;[/sql]

    Еще веселый вариант
    [sql]TRUNCATE TABLE tbl1;
    SELECT * INTO OUTFILE 'data.txt' FIELDS TERMINATED BY '|' FROM tbl2;
    LOAD DATA INFILE 'data.txt' INTO TABLE tbl1 FIELDS TERMINATED BY '|';
    [/sql]

    Причем я практически уверен, что любой из этих вариантов быстрее, чем выбирать строки с различающимися данными при отсутствии идентификатора изменений.
     
  7. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    karakh
    Записей пордяка пары миллионов.
    Как я понимаю, первые два варианта не подойдут из-за того, что базы данных разные, а вот 3-ий потестирую..
    Спасибо.