Надо сделать быструю вставку 50 - 100 тысяч записей в MySQL?
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
С помощью шаблонов MAV возможно такое реализовать ? Или есть другие пути?
Мultiple insert
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Полимат
- Сообщения: 1745
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 15 раз
- Поблагодарили: 10 раз
Мultiple insert
“Есть всего 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.
Алексей
Я пользуюсь таким оператором:
Clarion{prop:sql}= 'LOAD DATA LOCAL INFILE '''&Clip(left(ppp))&''' INTO TABLE '&clip(left(namefil))&';'
Работает быстро, но текстовый файл загрузки должен быть на том же компе, что и MySql.
Алексей
-
- Полимат
- Сообщения: 1745
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 15 раз
- Поблагодарили: 10 раз
Re: Мultiple insert
Алексей- Софт-Центр писал(а):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
Добрый день!
Условие: текстовый файл должен быть на компе, где база MySql.
Алексей
Этот оператор mySql загружает текстовый файл в таблицу. Он один.LOAD DATA LOCAL INFILE
Условие: текстовый файл должен быть на компе, где база MySql.
Алексей
-
- Полимат
- Сообщения: 1745
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 15 раз
- Поблагодарили: 10 раз
Re: Мultiple insert
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 раз, и это слабом соединении!
[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, увеличьте буфер ключа.
Алексей
1. При применении опции LOCAL выполнение может происходить несколько медленнее в сравнении с предоставлением серверу доступа к файлам напрямую, поскольку содержимое файла должно переместиться с клиентского хоста на сервер.
2. Можно попытаться добиться хорошей производительности и от команды insert ... . но для загрузки данных намного более быстрой является команда LOAD DATA INFILE.
3. Чтобы дополнительно повысить скорость выполнения команд LOAD DATA INFILE и INSERT, увеличьте буфер ключа.
Алексей