ІНФІЛЬ ЗАВАНТАЖЕННЯ ДАНИХ та розширені ВСТАВКИ мають різні переваги.
ІНФАЙЛ НАВАНТАЖЕННЯ ДАНИХ призначений для масового завантаження даних таблиці за одну операцію разом із дзвіночками та дзвінками для виконання відтінків, таких як:
- Пропуск початкових ліній
- Пропуск конкретних стовпців
- Перетворення конкретних стовпців
- Завантаження конкретних стовпців
- Поводження з повторюваними ключовими проблемами
Для розбору потрібно менше накладних витрат
З іншого боку, якщо ви імпортуєте лише 100 рядків замість 1 000 000 рядків, розширений INSERT є розумним.
Зауважте, що mysqldump був розроблений навколо розширених INSERT для перенесення таблиці таблиці разом із даними, оскільки вона виконує введення сотень чи тисяч рядків у INSERT. ЗАВАНТАЖЕННЯ ДАНИХ INFILE завжди створює фізичну дихомотику між схемою та даними.
З точки зору програми, ЗАВАНТАЖЕННЯ ДАНИХ ІНФІЛЕЙ також є більш нечутливим до зміни схеми, ніж розширені ВСТАВКИ.
Можна використовувати вперед і назад про хороше, погане та потворне використання ЗАВАНТАЖЕННЯ ДАННИХ ІНФІЛІЙ. Незалежно від того, якою технікою ви користуєтесь, ви завжди повинні встановлювати розмір bulk_insert_buffer_size . Чому?
Відповідно до документації MySQL на bulk_insert_buffer_size:
MyISAM використовує спеціальний кешоподібний кеш для того, щоб зробити масові вставки швидшими для INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., and LOAD DATA INFILE при додаванні даних до непустих столи. Ця змінна обмежує розмір дерева кеша в байтах на потік. Встановлення його на 0 відключає цю оптимізацію. Значення за замовчуванням - 8 МБ.
Протягом багатьох років я бачив, як клієнт після того, як клієнт не встановив цього, залишив його на рівні 8 МБ. Потім, коли вони вирішать використовувати ЗАВАНТАЖЕННЯ ДАНИХ INFILE або імпортувати mysqldumps, вони можуть відчути щось не так. Зазвичай я рекомендую встановити це на помірний 256 Мб. У деяких випадках 512М.
Після того, як у вас є достатньо великий об'ємний буфер INSERT, використання будь-якої техніки стає академічною і зводиться до особистого вибору. Для додатків, де ви набираєте INSERT лише 100 рядків на вимогу, дотримуйтесь розширених INSERT.
Справедливості, кажучи, що LOAD DATA INFILE швидше, ніж звичайні оператори INSERT є певним чином завантаженим оператором, головним чином тому, що конфігурація не враховується. Навіть якщо ви встановите орієнтир між INFILE ЗАВАНТАЖЕННЯ ДАНИХ та розширеними INSERT з належним bulk_insert_buffer_size, наносекунди, збережені при розборі кожного ряду, можуть давати лише номінальні результати в кращому випадку на користь ЗАВАНТАЖЕННЯ ДАНИХ INFILE.
Вперед і додайте це до my.cnf
[mysqld]
bulk_inset_buffer_size=256M
Ви також можете встановити його лише для свого сеансу перед запуском розширених INSERT
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
ОНОВЛЕННЯ 2012-07-19 14:58 EDT
Щоб зберегти речі в перспективі, буфер масової вставки корисний лише для завантаження таблиць MyISAM, а не InnoDB. Я написав останній пост про масове завантаження InnoDB: завантаження Mysql з інфіле застрягло, чекаючи на жорсткому диску
LOAD DATA INFILE
: Високошвидкісні вставки з MySQL . Підсумок: ви можете домогтися 65% продуктивностіLOAD DATA INFILE
використання розширених вставок. Я отримав 240 000 вставок / секунду на сучасному обладнанні.