我有一个包含约900K行的表格。
我想要删除其中大约90%的行。
我尝试使用TABLESAMPLE随机选择这些行,但性能提升不大。
以下是我尝试过的查询和它们的执行时间:
sql> DELETE FROM users WHERE id IN (
SELECT id FROM users ORDER BY random() LIMIT 5000
)
[2017-11-22 11:35:39] 5000 rows affected in 1m 11s 55ms
sql> DELETE FROM users WHERE id IN (
SELECT id FROM users TABLESAMPLE BERNOULLI (5)
)
[2017-11-22 11:55:07] 5845 rows affected in 1m 13s 666ms
sql> DELETE FROM users WHERE id IN (
SELECT id FROM users TABLESAMPLE SYSTEM (5)
)
[2017-11-22 11:57:59] 5486 rows affected in 1m 4s 574ms
仅删除5%的数据需要大约1分钟时间。因此,对于大型数据来说,这将需要很长时间。请建议我是否做得正确,或者是否有更好的方法。
tablesample system (10);
的目的是什么? - abbas