Я использую MySQL v5.1 .
Мой простой сценарий заключается в том, что я хотел бы импортировать большой объем данных из таблицы в одной базе данных в другую таблицу в другой базе данных. И таблица в другой базе данных (куда будут вставляться данные) будет сначала усечена.
Если говорить более подробно, скажем, у меня есть две базы данных с именами ' db_one ' и ' db_two ' соответственно.
db_one имеет таблицу с именем db_one_cars
, которая содержит 6 000 000 записей (это большой объем данных). В то время как db_two имеет таблицу с именем db_two_cars
, которая также содержит большое количество данных.
Я собираюсь сначала удалить все данные в db_two_cars
(обрезать таблицу), затем импортировать все данные из db_one_cars
в db_two_cars
. (Примечание: две таблицы находятся в двух базах данных соответственно).
Итак, я создал файл sql с содержимым, подобным следующему:
TRUNCATE TABLE db_two_cars;
ALTER TABLE db_two_cars DISABLE KEYS;
INSERT INTO db_two_cars (car_id, name, customer, company_name)
SELECT id, CONCAT('c-', name), customer, company_name FROM db_one.db_one_cars;
ALTER TABLE db_two_cars ENABLE KEYS;
обе db_one_cars и db_two_cars таблицы являются таблицами InnoDB и имеют одинаковую структуру, car_id
используется как primary key
, company_name
используется как multi-column key
, customer
используется как multi-column key
.
Я бы хотел ускорить этот большой объем импорта данных, а также хотел бы хорошую производительность для запроса таблицы после искажения данных.
мои вопросы:
- Нужно ли иметь
OPTIMIZE TABLE db_two_cars
в конце моего оператора SQL? и почему? (это улучшит производительность? Я просто вставляю данные)
- Нужно ли использовать
ALTER TABLE db_two_cars PACK_KEYS = 0 ?
и почему? (улучшит ли это производительность)
- Что еще можно сделать, чтобы повысить скорость и производительность запросов в будущем?
P.S. Производительность, которую я имею в виду, включает ускорение импорта данных и хорошую производительность для будущих запросов данных