我正在将2.5gb的csv文件导入mysql表。我的存储引擎是innodb。这是脚本:
use xxx;
DROP TABLE IF EXISTS `xxx`.`xxx`;
CREATE TABLE `xxx`.`xxx` (
`xxx_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`yy` varchar(128) NOT NULL,
`yyy` varchar(64) NOT NULL,
`yyyy` varchar(2) NOT NULL,
`yyyyy` varchar(10) NOT NULL,
`url` varchar(64) NOT NULL,
`p` varchar(10) NOT NULL,
`pp` varchar(10) NOT NULL,
`category` varchar(256) NOT NULL,
`flag` varchar(4) NOT NULL,
PRIMARY KEY (`xxx_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
set autocommit = 0;
load data local infile '/home/xxx/raw.csv'
into table company
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\r\n'
(
name,
yy,
yyy,
yyyy,
yyyyy,
url,
p,
pp,
category,
flag
);
commit;
为什么我的PC(核心i7 920和6GB内存)在运行这些查询时只消耗9%的CPU功率和60%的内存?
答案 0 :(得分:8)
可能是因为它是一个受I / O限制的进程。这意味着该过程中最慢的部分是从磁盘读取CSV文件并将MySQL数据库写回磁盘。磁盘访问速度远远低于计算机内部的任何其他内容,因此您的CPU可能只需要几个百分点的使用率来跟上它。
此外,MySQL正在一次复制数据,而不是一次复制,因此它只需要在RAM中一次存储一点。这就是它可能没有使用大量内存的原因。
答案 1 :(得分:1)
因为它不是真正的CPU或内存操作,它主要是磁盘I / O操作吗?