我有一张超过7500万个寄存器的表。我想通过运行一个小组来总结这些注册表。
表结构是:
CREATE TABLE `output_medicos_full` (
`name` varchar(100) NOT NULL DEFAULT '',
`term` varchar(50) NOT NULL DEFAULT '',
`hash` varchar(40) NOT NULL DEFAULT '',
`url` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`name`,`term`,`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我想要执行下面的查询,但使用专用的mysql服务器5.5和4GB RAM需要这么长时间:
INSERT INTO TABLE report
SELECT
`hash`
,CASE UPPER(SUBSTRING_INDEX(url, ':', 1))
WHEN 'HTTP' THEN 1
WHEN 'HTTPS' THEN 2
WHEN 'FTP' THEN 3
WHEN 'FTPS' THEN 4
ELSE 0 end
,url
FROM output_medicos_full
GROUP BY `hash`;
在表格报告中,哈希列上有一个唯一索引
有任何帮助加快速度吗?
感谢的
答案 0 :(得分:1)
这里的主要成本是所有I / O.需要阅读整个表格。
对于4GB的RAM, innodb_buffer_pool_size = 2G
非常危险。如果发生交换,性能将受到严重影响。
由于hash
是一个SHA1,因此在75M网址中极有可能是唯一的。这样GROUP BY
将产生75M行。这可能不是你想要的。重写查询后,我们可以讨论优化。