はじめに 各種のDB中の集計作業を行うにあたって、以下のようなデータをどうしても扱わなければならない場合は、SQLのみで完結させないことを検討しなければ、サーバリソースを大量に消費した挙句、何時まで経っても作業が完了しないということが有ります。 SQL操作だけに頼らないことを検討したい集計例 explainすることで大体の傾向はわかりますが、おおよそ以下のような要素を含む集計が対象となります。 対象のレコード数が巨大である(数百万レコード以上) DBの余剰リソースにもともと余裕が無い indexのふられていない項目で集計/joinしなければならない join対象の項目がやけに多い not in 巨大なサブクエリ is null group by like etc... ではどうするか? 集計対象のレコードを一旦ファイルに吐き出した上で、ファイルベースの処理をしてしまいましょう。 実践例1
![集計はRDBばかりに頑張らせるのをやめると幸せになれる。 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/a1b86ced3003c7b27e1a50f62f8d0ff8420713b7/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUU5JTlCJTg2JUU4JUE4JTg4JUUzJTgxJUFGUkRCJUUzJTgxJUIwJUUzJTgxJThCJUUzJTgyJThBJUUzJTgxJUFCJUU5JUEwJTkxJUU1JUJDJUI1JUUzJTgyJTg5JUUzJTgxJTlCJUUzJTgyJThCJUUzJTgxJUFFJUUzJTgyJTkyJUUzJTgyJTg0JUUzJTgyJTgxJUUzJTgyJThCJUUzJTgxJUE4JUU1JUI5JUI4JUUzJTgxJTlCJUUzJTgxJUFCJUUzJTgxJUFBJUUzJTgyJThDJUUzJTgyJThCJUUzJTgwJTgyJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zYzI5Zjk5MWMzYWEzNTQ2MTA0NzI1OTRkZDM3NjRhZA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwdGFydWhhY2hpJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iZmZiMzU0ZmM4OWE1N2I3MzQzODE1MGU4MTY2NTFkNg%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D87198b5c37b059d37eb0a95d1953f4ce)