MySQL的INSERT INTO索引表需要长时间之后几百万条记录
我有一个表像这样MySQL的INSERT INTO索引表需要长时间之后几百万条记录
CREATE TABLE IF NOT EXISTS `dnddata` (
`numbers` varchar(10) NOT NULL,
`opstype` char(1) NOT NULL,
PRIMARY KEY (`numbers`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (numbers)
PARTITIONS 25 */;
我必须插入件300万条记录。我每次使用csv文件中的load data in file
插入1000万条记录。
要插入1000万条第一次记录需要近5分钟的记录。时间逐渐增加。在30万条记录停止插入和使用100%服务器没有响应的内存之后。
下面我my.cnf
文件
bulk_insert_buffer_size = 100M
key_buffer = 100M
sort_buffer_size = 50M
read_buffer = 50M
我使用CPU搭配2G内存设置。
细节30万个记录
Space usage
Type Usage
Data 545.3 MiB
Index 694.8 MiB
Total 1,240.1 MiB
MySQL client version: 5.5.14
与出索引它插入细1000万50秒。
请告诉我需要改变什么样的设置。
尝试:MySQL的修改配置文件后
key_buffer_size = 1G
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
bulk_insert_buffer_size = 32M
myisam_sort_buffer_size = 256M
重启MySQL服务器:
ALTER TABLE dnddata DISABLE KEYS;
LOAD DATA INFILE...
ALTER TABLE dnddata ENABLE KEYS;
同时配置的my.cnf作为。下面
公式可以帮助您配置参数正确:
key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections = K bytes of memory (< 2GB)
你真的需要数为varchar(10)?使其char(10)或int将有助于提高性能。
在varchar列上创建PRIMARY KEY的开销很大,所以如果不需要,可以放弃它。
谢谢你的回应。我会尝试发布反馈。 – 2012-07-24 07:16:24
我试过以上设置。即使没有用。我已经等了10多万分钟。它没有完成。 – 2012-07-24 07:44:33
我编辑了我的帖子。尝试禁用密钥,然后加载数据并启用密钥。 – Omesh 2012-07-24 07:49:57
'数字'需要是varchar吗?整数列上的索引肯定会更有效。 – Sam 2012-07-24 07:17:13
@sam。数字必须是varchar。因为这些是手机号码,超出了整数值。 – 2012-07-24 07:20:32
您可以使用BIGINT,但它仍然比varchar更快。 – Omesh 2012-07-24 07:28:35