我必须从MySQL表中删除40 mln行。MySQL加入和删除只发生第一次发生
我必须找到与输出的所有行 - >“静态输出” 然后删除上面的输出行和删除其上面的输出和比其他产值“的同一台主机 和服务的下一行STATIC OUTPUT“。
的样本数据:
列- > ID,主机,服务,输出
1,"127.0.0.1","service1","STATIC OUTPUT"
2,"127.0.0.2","service5","RANDOM OUTPUT X0"
3,"127.0.0.2","service5","STATIC OUTPUT"
4,"127.0.0.3","service1","RANDOM OUTPUT X1"
5,"127.0.0.3","service10","RANDOM OUTPUT X2"
6,"127.0.0.2","service5","RANDOM OUTPUT X3"
7,"127.0.0.1","service2","RANDOM OUTPUT X4"
8,"127.0.0.1","service1","RANDOM OUTPUT X5"
9,"127.0.0.2","service4","RANDOM OUTPUT X6"
10,"127.0.0.3","service10","RANDOM OUTPUT X7"
11,"127.0.0.1","service1","RANDOM OUTPUT X7"
12,"127.0.0.1","service1","RANDOM OUTPUT X8"
13,"127.0.0.1","service1","RANDOM OUTPUT X9"
14,"127.0.0.2","service5","RANDOM OUTPUT X10"
15,"127.0.0.1","service1","STATIC OUTPUT"
16,"127.0.0.1","service1","RANDOM OUTPUT X11"
17,"127.0.0.1","service1","RANDOM OUTPUT X12"
...
例子:当我们发现
1,"127.0.0.1","service1","STATIC OUTPUT"
我们应该删除ID为值的行1和8,
8,"127.0.0.1","service1","RANDOM OUTPUT X5"
当我们发现
3,"127.0.0.2","service5","STATIC OUTPUT"
我们应该删除与ID值3和6行,
6,"127.0.0.2","service5","RANDOM OUTPUT X3"
我写了这样的事情(选择,因为测试查询的DELETE语句的这一翻译),
SELECT * FROM data r1 INNER JOIN (SELECT id, host, service
FROM data
WHERE output = 'STATIC OUTPUT') r2 ON
r1.id>r2.id AND r1.service=r2.service
AND r1.host=r2.host
AND r1.output<>'STATIC OUTPUT'
GROUP BY r1.host, r1.service
但我认为这是一种错误的方式。
MySQL 5.1.73
你有重组的表,因为它不觉得我的权利,你的存储方式,并与数据工作的选项。你在那里有数据的历史。你为什么不让主机/服务独一无二? – DanFromGermany
我无法更改表格的结构。我是应用/系统管理员而不是应用开发人员。该查询只能使用一次。由于系统错误,我们有很多未连接的数据。 – Dream
如果你没有正确地构建你的数据库,你将永远有不时的错误数据;-) – DanFromGermany