私は私の質問の説明を肉屋にしないことを願っています:
何百もの行を持つテーブルがあります。各行は栄養情報を含むレシピです。たとえば、次のようになります。
レシピテーブル:
id | calories | protein| carbs | fat
recipe1, 100, 20g, 10g, 2g
recipe2, 110, 10g, 12g, 12g
recipe3, 240, 20g, 1g, 23g
....
私は、recipe_table 内のすべてのレシピのすべての可能な組み合わせを 3 つのセットとして表示する新しいテーブル (recipe_index) を作成する必要があったため、次のようになります。
レシピ_インデックス:
id1 | id2 | id3 |calories| protein | carbs | fat
recipe1, recipe2, recipe3, 450, 50g, 23g, 37g
....
基本的には、recipe_index をクエリして、「合計値が 440 カロリーから 460 カロリーになるレシピの 3 つの組み合わせはどれか」と言うことができます。
これを行うための私の現在のコードは 3 食で機能しますが、recipe_index には約 450,000 のレコードが残ります。4、5、6 食でも同じことを行う必要があるため、数百万のレコードを計算していますこれの終わり。これを行うより効率的な方法はありますか?おそらく、各範囲のテーブルのパーティション分割を検討する必要がありますか?
私の現在のSQLコード:
INSERT INTO recipe_index
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3, 0 as id4,
t1.calories_ps+t2.calories_ps+t3.calories_ps as calories, t1.protein_ps+t2.protein_ps+t3.protein_ps as
protein, t1.carbohydrate_ps+t2.carbohydrate_ps+t3.carbohydrate_ps as carbohydrate,
t1.fat_ps+t2.fat_ps+t3.fat_ps as fat from recipes t1 inner join recipes t2 on t1.Id < t2.Id inner join recipes t3 on t2.Id < t3.Id WHERE t1.image <> '' AND t2.image <> '' AND t3.image <> ''
明らかな何かを見逃した場合はお知らせください