INSERT INTO ... SELECT ... vs сброс / загрузка файла в MySQL - PullRequest
1 голос
/ 07 мая 2010

Каковы последствия использования оператора вставки в стиле INSERT INTO foo ... SELECT FROM bar JOIN baz ... по сравнению с использованием того же оператора SELECT для выгрузки (bar, baz) в файл и последующей вставки в foo путем загрузки файла?

В моем бездельничании я не видел большой разницы. Я бы предположил, что первый будет использовать больше памяти, но машина, на которой он работает, имеет 8 ГБ ОЗУ, и я даже не вижу, чтобы она использовалась наполовину.

Есть ли какие-то огромные (или долгосрочные) последствия для производительности, которых я не вижу? Преимущества / недостатки либо?

РЕДАКТИРОВАТЬ: этот процесс загрузки происходит самостоятельно. Ничто иное не запрашивает базу данных в то время, так что блокировка таблиц не имеет большого значения, просто скорость.

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

проблема одновременных пользователей. INSERT-SELECT должен удерживать блокировки, чтобы гарантировать дублирование и предотвратить любые изменения во время копирования. Метод file может иметь изменения до того, как вы ВСТАВИТЕ. Если это имеет значение, зависит от того, как вы определили FK и для чего вы действительно это делаете. Вы можете не иметь блокировок, поэтому используйте файл.

0 голосов
/ 07 мая 2010

Одним из преимуществ функции dump-and-load является то, что он не блокирует выбранные вами таблицы. Если выбор выполняется в течение длительного времени, это может быть довольно важным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...