処理高速化

ツリー表示処理を高速化しました。作りが悪くて30秒ぐらいかかっていたのが3秒もかからず表示されるようになりました。10倍以上です。今まで重い処理を流していてごめんなさいというところ。

データはデータベースで管理していて木構造を表すのに隣接リストモデルを使っています。ツリー表示は、自分自身を表示してから子の一覧を取得して、それぞれの子に対して同様の処理を行うという再帰処理で実現しています。子の一覧を取得するところでSQLを発行していたので、データが増えるに従ってSQLの呼び出し回数が増えてしまうというやり方でした。

データが増えたら遅くなるだろうなと思っていたら、本当に遅くなってしまいました。

利用者を待たせるのは良くないし、共用のリソースをあまりにも無駄にするのも良くないので修正。

SQLの発行回数が多いのが問題だというのは分かっていたのでそこを改善。再帰の度に毎回SQLを実行するというのをやめて、必要なデータを最初に全件取得して変数に格納。そこからデータを取るように変えました。おかげでSQLの発行が1回になって高速化成功。

この方式もデータがすごく増えると破綻するのですけど、今後データがすごく増えるということもないので問題にはならないと思います。