这是我在此处发布的原始问题的第二篇文章。
我的设置:
amazon RDS
使用MySQL Workbench
连接超时设置为最大值
我正在尝试从我的 dB 中删除重复的行,它有接近 1MIL 行。
表看起来像这样,mytext 是一个mediumtext
blob。 id
是 AUTO_INCREMENT
+---+-----+-----+------+-------+
|id |fname|lname|mytext|morevar|
|---|-----|-----|------|-------|
| 1 | joe | min | abc | 123 |
| 2 | joe | min | abc | 123 |
| 3 | mar | kam | def | 789 |
| 4 | kel | smi | ghi | 456 |
+------------------------------+
我想最终得到一张这样的桌子
+---+-----+-----+------+-------+
|id |fname|lname|mytext|morevar|
|---|-----|-----|------|-------|
| 1 | joe | min | abc | 123 |
| 3 | mar | kam | def | 789 |
| 4 | kel | smi | ghi | 456 |
+------------------------------+
该解决方案开始工作,但在大约 10,000 行之后,该过程需要更长的时间并最终挂起。
我让它运行了 20 多个小时,在 WHERE 条件下设置为 10000 行(我认为分块删除会更安全)。
但即使使用 WHERE 子句,系统也会挂起,然后我必须重新启动RDS
才能访问 dB。
DELETE
FROM yourTable
WHERE id>40000
AND id<=50000
AND id NOT IN
(
SELECT MAXID FROM
(
SELECT MAX(id) as MAXID
FROM yourTable
GROUP BY mytext
) as temp_table
)
这是创建语句
CREATE TABLE `yourTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fname` varchar(45) DEFAULT NULL,
`lname` varchar(45) DEFAULT NULL,
`mytext` mediumtext,
`morevar` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
问题
这个 sql 命令是否可以处理大量行以及我想要实现的目标?或者有没有更好的解决方案。
处理 1MIL 行通常需要多长时间?
亚马逊内部是否有类似php.ini
大型数据集操作的设置?
或者创建一个新表并插入除重复项之外的所有行会更有意义吗?