我的表格包含: id , pointId , pointValue ,大约有10.000.000行。
我必须通过删除90%的行来减少它,所以我需要保留每个第十条记录,并删除任何其他记录。
使用表格中的 id 并不是一个好主意,因为这不是连续数字序列。
如何通过查询来完成?
答案 0 :(得分:1)
我不确定为什么你真的需要删除这么多数百万条记录 但是,以下方法可能对您有所帮助。
您可以生成动态'row_number'
,根据该动态10th
可以过滤每个'points_table'
行并删除其余记录。
示例强>:
假设表名为delete from points_table
where id NOT IN (
select id from (
select @rn:=@rn+1 as row_num, p.id
from points_table p, (select @rn:=0) rn
) list_of_ids_to_be_deleted
where row_num % 10 = 0
)
。
{{1}}
答案 1 :(得分:0)
您可以尝试: -
DELETE FROM TABLE_NAME
WHERE ID NOT IN
(SELECT ID FROM (SELECT @RN:=@RN+1, ID, POINTID, POINTVAL
FROM TABLE_NAME, (SELECT @RN:=0) T) T1
WHERE MOD(@RN,10) = 0)
这可能会对你有帮助。
答案 2 :(得分:0)
一个简单的解决方案,假设你有1000万行,应删除90%的行。
DELETE FROM MyTable WHERE Id IN (SELECT Id FROM MyTable LIMIT 9000000);