У меня есть следующая таблица:
CREATE TABLE `Product_Category_Rank` (
`CategoryId` SMALLINT(5) UNSIGNED NOT NULL ,
`ProductId` VARCHAR(32) NOT NULL ,
`RankedOn` DATE NOT NULL ,
`PopularityRank` SMALLINT(5) NOT NULL ,
PRIMARY KEY (`CategoryId`, `ProductId`, `RankedOn`) ,
INDEX `fk_Product_Category_Rank_Product` (`ProductId` ASC) ,
INDEX `fk_Product_Category_Rank_Category` (`CategoryId` ASC) ,
CONSTRAINT `fk_Product_Category_Rank_Category`
FOREIGN KEY (`CategoryId` )
REFERENCES `Category` (`CategoryId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Product_Category_Rank_Product`
FOREIGN KEY (`ProductId` )
REFERENCES `Product` (`ProductId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci
У меня есть файл CSV (который я импортирую ежедневно), который содержит чуть менее 30 000 записей.
Я пробовал:
LOAD DATA LOCAL INFILE 'temp/product_category_rank.csv'
INTO TABLE `Product_Category_Rank`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n';
Также я попытался загрузить файл во временную таблицу и выполнить:
INSERT
INTO `Product_Category_Rank` ( ... )
SELECT ...
FROM `tmp_product_category_rank`
Оба метода работают одинаково (одинаковые результаты), однако второй, я уверен, имеет немного более высокую стоимость ресурсов. Проблема, с которой я сталкиваюсь, заключается в том, что каждый день время импорта в функции загрузки / вставки-выбора увеличивается примерно на 3 секунды в день. Итак, день 30, я смотрю 90 секунд, чтобы выполнить прямой импорт в таблицу.
Факты: при импорте никогда не будет дублированных первичных ключей (если, конечно, я не пытаюсь импортировать одни и те же данные дважды, что не является проблемой)
Так есть ли способ ускорить этот процесс (возможно, отключить проверку ключа перед импортом? (Как?))
edit: Также следует отметить, что проверки внешнего ключа также не требуются, так как таблицы Category и Product уже были обновлены, и ограничения внешнего ключа не являются проблемой при импорте.