読者になるsakaikの日々雑感~(T)編2022-08-12続・歯抜けを埋めるSQL(10万件編)mysql先日、こんな日記を書きました。sakaik.hateblo.jpこの中で、この方法で、件数が多くなった場合にどれくらいの速度で動きますかね。10万件かそこらでは意外とすんなり動く気もしていますが、1000万件となるときついかもという気もします。書いたのですが、10万件程度ならすぐに試せそうなので、やってみました。sec)10万件のデータを作る。最初は100万でやろうとしていたのにゼロ書き間違えて10万になってしまったので、プロシジャ名と一致していないのはご愛敬。sec)5秒ほどで10万件のデータが作成されました。ここからランダムにだいたい1000件くらいのデータを削除します。sec)削除は、やはり時間がかかりますね。|+----------+あれ。1000回しかループ回してないのに1000以上消えてる。なんかおかしいですが、今回の作業に影響はないので、先に進みます。(いやほんと気持ち悪い。何がおきてるんだ・・)例のSQLを試すということで、先日の日記の結論となったSQLを流してみます。今回はINSERTはせずに、見つけ出すところまで(SELECTだけ)を実施することにします。エラーになってしまいました。CTE内でrecursive階層に制限があるのでした。一時的にこの値を上限開放して続行することにします。sec)0.2秒程度で返ってきました。件数もちょうど歯抜け部分の件数と一致しています。8.0.30、メモリ系のパラメタはほぼデフォルトのままで動作させているものです。10万件の中の1000件を埋める程度なら、予想通り楽勝ですね。未練1000回ループを回して1件ずつDELETEしたのに、1006件が消えている謎は、気持ち悪いので少し考えてみたいと思います。ナゾが解けた方はコメント欄やTwitterやご自身のブログなどで教えてください。99029件になりました。こちらは既に削除済みのIDを再度削除に行くなどが発生したのだと理解していたのですが、見直してみるとこれも、ずいぶんと重複しすぎている感もありますね。(10万の中から数字をひとつ決めるのに、こんなに被らないだろうと)追記[2022/08/13]「未練」となっていた不思議な動作について、判明しました。不思議でもなんでもありませんでした。動作原理をしっかり知っていれば納得の挙動です。次の日記を参照ください。「リリースノートでわいわ...2022-08-13続続・歯抜けを埋めるSQL(WHERE句のRAND()関数に気をつけろ!編)ひとつ前の日記で、こんなことを書きました。1000回ループを回...2022-08-10歯抜け数字を埋めるSQLMySQLユーザ会のメーリングリストで、こんな話題がありました。はてなブログPro気楽気ままに、主に技術に関することお仕事に関係することおよびそれらの周辺領域について書いていきます。各記事につけられた日付は便宜上のものであり、必ずしも記事公開の日付をあらわしたものではありません。サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。はてなブログをはじめよう!sakaikさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。