Ta9m1-N / bugslife_java-1.0.1

0 stars 0 forks source link

No.31 Orders一覧 クエリの削減 #68

Open Ta9m1-N opened 8 months ago

Ta9m1-N commented 8 months ago

概要

受注一覧ページの表示が重い。クエリログでは大量のクエリが実行されていたため、クエリの取捨選択と最適化ができないか調査し修正する。

不具合調査結果

一覧ページのクエリログを確認したところ、ordersテーブルから全取得とorderProductsテーブルからorderId毎に全取得のクエリがあった。不要なクエリ文はなかったが、orderProductsテーブルからorderId毎に全取得のクエリについては一覧に必要なカラムに対して取得カラムが特に多いため、改善の余地がある。

修正方針

一覧表示用に取得するカラムを最適化するため、OrderRepositoryにQueryアノテーションを付与したfindIndexメソッドを作成する。

タスクリスト

OrderController

OrderService

OrderRepository

追加修正

findIndex()メソッドの返り値の型がList\<Object[]>になるため、OrderServiceのfindIndex()内でList\<Object[]>からList\に変換する処理を記述する。

OrderService

Ta9m1-N commented 8 months ago

回答までのアプローチ

クエリログを確認し、一覧表示に必要な要素以上のデータが取得されていたため、クエリ文の最適化が必要と判断した。プロンプトの回答から、QueryアノテーションによるJPQL記述で最低限のデータを取るように修正。 ordersテーブルだけでなくorderProductsテーブルのカラムも参照していたため、返り値の型がList\<Object[]>となってしまい、OrderServiceでの変換処理を追加した。

プロンプト履歴

https://chat.openai.com/share/e8801005-09fb-45be-bb95-d2ac2a6ee000