7
A
回答
13
理論上,這將是隨機的和快速的。在實踐中,這將是隻快:
DELETE FROM tableX
LIMIT 4000
這將是隨機的,但非常緩慢,600K行:
DELETE FROM tableX
ORDER BY RAND()
LIMIT 4000
這會不會是真正隨機的(如通常在ID中有間隙),它甚至可能不會刪除正好4000行(但是當有很多間隙時少一些),但它可能比以前更快。
在子查詢中的一個額外的包裝是需要的,因爲從多個表中爲刪除的語法不允許LIMIT
:
DELETE td
FROM
tableX AS td
JOIN
(SELECT t.id
FROM
tableX AS t
CROSS JOIN
(SELECT MAX(id) AS maxid
FROM tableX
) AS m
JOIN
(SELECT RAND() AS rndm
FROM tableX AS tr
LIMIT 5000
) AS r
ON
t.id = CEIL(rndm * maxid)
LIMIT 4000
) AS x
ON
x.id = td.id
解釋輸出(子查詢,從400K行表):
id table possible_keys key_len rows
select_type type key ref Extra
1 PRIMARY <derived2> system 1
1 PRIMARY <derived3> ALL 5000
1 PRIMARY t eq_ref PRIMARY PRIMARY 4 func 1 Using where;Using index
3 DERIVED tr index PRIMARY 4 398681 Using index
2 DERIVED Select tables optimized away
+0
釘住它!謝謝 – silkAdmin
+0
請注意,它可能會刪除少於4000行! –
1
0
DELETE FROM TABLE ORDER BY RAND() LIMIT 4000;
這需要時間,但...
一個更快的w^AY執行(不寫代碼!)可能是在一個循環
DELETE FROM TABLE WHERE AssumedPKisInt = <ARandomNumber>
當然4000項獨立刪除,你需要確保你不嘗試刪除不存在或已刪除的行。
0
如果我不得不冒昧猜測:
DELETE FROM table where id = (SELECT id FROM table ORDER BY rand() LIMIT 1) LIMIT 10
相關問題
- 1. 從多個表格中刪除整行
- 2. 刪除多個表中的多行MYSQL
- 3. 隨機刪除行
- 4. 隨機從一個MySQL表
- 5. 從多個相關表格中刪除
- 6. MySQL - 從大表中選擇隨機行
- 7. 從MySQL表中隨機選擇行
- 8. 刪除多個MySQL行時,框是未選中PHP表格
- 9. 從表中刪除多行
- 10. 從表中刪除多行
- 11. Mysqli從多個表中刪除行
- 12. C#從多個表中刪除行
- 13. 從多個表中刪除行
- 14. 從多個表中刪除行
- 15. 刪除列表中的多個隨機項目
- 16. 如何從kdb表中刪除隨機行?
- 17. 從多個表中刪除
- 18. HTML表格中的MYsql。刪除行
- 19. 使用jQuery刪除多個表格行
- 20. html從表格行中刪除空格
- 21. 使用單個值從mysql中的多個表中刪除多行
- 22. 小表中的多個隨機行
- 23. 的MySQL從1個表中刪除,使用多個表
- 24. 從wordpress中刪除隨機數
- 25. 從網址中刪除#和隨機數
- 26. 從ArrayList中刪除隨機項目
- 27. 從NSMutableArray中刪除隨機項目
- 28. 從arrayList中刪除隨機索引
- 29. 從mysql中的表中隨機選擇一個'已發佈'行
- 30. 如何從MySQL中的表中選擇一個隨機行?
'DELETE FROM表WHERE ID = RAND()LIMIT 4000'? :)或'RANDOM()'?也不確定;) – Vyktor