Мultiple insert

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
Полимат
Сообщения: 1745
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 15 раз
Поблагодарили: 10 раз

Мultiple insert

Сообщение gopstop2007 »

Надо сделать быструю вставку 50 - 100 тысяч записей в MySQL?

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

С помощью шаблонов MAV возможно такое реализовать ? Или есть другие пути?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Мultiple insert

Сообщение Алексей- Софт-Центр »

Добрый день!
Я пользуюсь таким оператором:

Clarion{prop:sql}= 'LOAD DATA LOCAL INFILE '''&Clip(left(ppp))&''' INTO TABLE '&clip(left(namefil))&';'

Работает быстро, но текстовый файл загрузки должен быть на том же компе, что и MySql.


Алексей
gopstop2007
Полимат
Сообщения: 1745
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 15 раз
Поблагодарили: 10 раз

Re: Мultiple insert

Сообщение gopstop2007 »

Алексей- Софт-Центр писал(а):LOAD DATA LOCAL INFILE
Алексей- Софт-Центр писал(а): Clarion{prop:sql}= 'LOAD DATA LOCAL INFILE '''&Clip(left(ppp))&''' INTO TABLE '&clip(left(namefil))&';'
Работает быстро, но текстовый файл загрузки должен быть на том же компе, что и MySql.

Спасибо, я этот вариант оставлю про запас, если других не будет.

Тут возможны минусы - лишние операции

1. Создавать файл, на которое тоже расходуется время + возможна(ы) ошибка(и) при создании файла.
2. Таблицу надо блокировать (LOCK WRITE) на время записи, для моей ситуации не приемлемо или использовать CONCURRENT от него будет ли выигрыш в скорости?

И еще вопрос LOAD DATA LOCAL INFILE - это я так понимаю с хоста клиента данные бросаются на сервер, а второй LOAD DATA INFILE файл находится на сервере (понятное дело скопировав его туда предварительно) и оттуда бросаются в MySQL, какую из команд выбрать, чтобы получить выигрыш?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Мultiple insert

Сообщение Алексей- Софт-Центр »

Добрый день!
LOAD DATA LOCAL INFILE
Этот оператор mySql загружает текстовый файл в таблицу. Он один.
Условие: текстовый файл должен быть на компе, где база MySql.

Алексей
gopstop2007
Полимат
Сообщения: 1745
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 15 раз
Поблагодарили: 10 раз

Re: Мultiple insert

Сообщение gopstop2007 »

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]
]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name,...)]

Если задано ключевое слово LOCAL, то файл читается с клиентского хоста. Если же LOCAL не указывается, то файл должен находиться на сервере.
я сделал, и у меня файл на на хосте клиента (см. выше LOCAL) скорость загрузки данных при 3g-модемном соединении скорость увеличилось по времени в 20 раз, и это слабом соединении!
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Мultiple insert

Сообщение Алексей- Софт-Центр »

Добрый день!
1. При применении опции LOCAL выполнение может происходить несколько медленнее в сравнении с предоставлением серверу доступа к файлам напрямую, поскольку содержимое файла должно переместиться с клиентского хоста на сервер.
2. Можно попытаться добиться хорошей производительности и от команды insert ... . но для загрузки данных намного более быстрой является команда LOAD DATA INFILE.
3. Чтобы дополнительно повысить скорость выполнения команд LOAD DATA INFILE и INSERT, увеличьте буфер ключа.

Алексей
Ответить