“指定件数データをランダム取得して削除する方法” MariaDB

2019-12-18

指定件数データをランダム取得して削除する方法
MariaDB5.5にてテストデータ等でパフォーマンスチェックなどする時に、
大量データを突っ込んで指定件数ランダムに削除するといったことがあったので
その時のTIPSをメモ。

MariaDB5.5でサブクエリ内LIMITができない

最初普通にサブクエリでランダムに指定件数を取り、
その結果を削除する方法をを試すが、当バージョンではできないエラーが返る。

ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

なのでVIEWを作成して削除する

#VIEW作成
CREATE VIEW tmp_mail_master AS SELECT id FROM mail_master ORDER BY RAND() LIMIT 600000;

#データ削除
DELETE FROM mail_master WHERE mail_master.id IN (SELECT id FROM tmp_mail_master);

#VIEW削除
DROP VIEW tmp_mail_master;

VIEW一覧取得は

select TABLE_SCHEMA,TABLE_NAME from information_schema.tables 
where TABLE_TYPE = 'VIEW' and  TABLE_SCHEMA = 'database名';