每10,000行插入大约需要124秒,这怎么可能更快
这是我要插入的表
CREATE TABLE `orders`
(`oid` int(11) NOT NULL AUTO_INCREMENT,
`countryCode` varchar(10) NOT NULL,
`date` datetime NOT NULL,
`id` bigint(20) NOT NULL,
`productId` bigint(20) NOT NULL,
PRIMARY KEY (`oid`),
UNIQUE KEY `id` (`id`),
KEY `date` (`date`),
KEY `productId` (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=4833010 DEFAULT CHARSET=latin1
这是我使用的查询
ALTER TABLE `orders` DISABLE KEYS;
SET FOREIGN_KEY_CHECKS=0;
INSERT IGNORE INTO `orders` (`countryCode`, `date`, `id`,`productId`)
VALUES
('ru','2019-04-09 06:59',100453324298986,32829863707) ,
('fr','2019-04-09 05:59',100645420835625,32829863707) ,
('ru','2019-04-08 12:04',704482263524094,32829863707)
.......etc 10,000 rows here at once
答案 0 :(得分:0)
尝试将插入语句写为
START TRANSACTION;
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
...
COMMIT;
答案 1 :(得分:0)
我认为它很慢,因为您尝试一次插入大容量记录。 您有几种方法可以加快这一过程。
1)批量插入记录。 (一次500-1000条记录)
2)增加MYSQL中的内存参数。因此内存将增加。 (http://www.geeksengine.com/database/data-manipulation/bulk-insert.php)
尝试此操作以进行批量更新
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
SET GLOBAL bulk_insert_buffer_size =1024*1024*512;
START TRANSACTION;
INSERT IGNORE INTO `orders` (`countryCode`, `date`, `id`,`productId`)
VALUES
('ru','2019-04-09 06:59',100453324298986,32829863707) ,
('fr','2019-04-09 05:59',100645420835625,32829863707) ,
('ru','2019-04-08 12:04',704482263524094,32829863707)
.......etc 600 rows here at once
COMMIT;
START TRANSACTION;
INSERT IGNORE INTO `orders` (`countryCode`, `date`, `id`,`productId`)
VALUES
('ru','2019-04-09 06:59',100453324298986,32829863707) ,
('fr','2019-04-09 05:59',100645420835625,32829863707) ,
('ru','2019-04-08 12:04',704482263524094,32829863707)
.......etc 600 rows here at once
COMMIT;
注意:
1)如果速度很慢,请尝试更改bulk_insert_buffer_size,并且每次插入都没有行数。
2)在执行查询之前,检查您的PC可用内存/ CPU。尝试尽可能释放它