これは、私がいる場所で常に頭に浮かぶテーマです。行のリストを返すタイプのクエリの場合、その特定の行に関するより多くの情報を収集する追加のクエリを実行したいことがよくあります。これには、行のリストを返すクエリが含まれることがよくあります。この例としては、顧客のリストを返す注文システムが挙げられます。各顧客の「行」には、注文のリストも (おそらくポップアップ ダイアログで) 表示される場合があります。
一般に、次のことは「より良い」ですか?
- 可能な場合は を使用して 1 つのクエリを実行
GROUP_CONCAT
し、結果をプログラムで分割します (返される連結の長さには制限があります)。 - 「親クエリ」の結果をループしながら、各行に対して「子クエリ」を実行します
- 1 つの「親クエリ」を実行して顧客リストを返し、SQL
IN
キーワードを使用して 1 つの「注文」クエリを実行して、前のクエリから返された customer_ID と一致させます。customer クエリの結果をループすると、orders クエリに customer_ID が存在するかどうかを確認し、一致する注文を表示できます。 - 2 番目のクエリを as and when に実行します。その理由は、親の結果ごとに子の結果を常に表示したいわけではないためです (Web アプリを使用すると、AJAX を使用して子の結果を取得できます)。
- 他の何か?
概念的には最もクリーンなソリューションのように見えるので、私は#2に傾いていますが、それはリソースを浪費していると思わざるを得ません。特定の一連の結果に対して独自のベンチマークを実行すると、#3 が最も早く出てきます。一部のアプリケーションはすべての結果を表示する必要がないため、#4 が最も高速であるように思われますが、その意図は、その行の子データを取得するための別のラウンドトリップではなく、結果を準備して待機させることである可能性があります。などのメカニズムがどのように機能するかは完全にはわかりませんFETCH_ASSOC
が、推奨事項は大歓迎です!