SQL插入查询太慢

时间:2019-04-10 11:22:24

标签: mysql sql

每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

2 个答案:

答案 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。尝试尽可能释放它