嘿,我一直在四處尋找,無法找到解決我的問題。 我有一個營養數據庫,有3個表。所有3個表格都有單個項目的名稱,營養成分和計量單位。我想要返回單個營養素含量最高的物品,即。蛋白。Double Inner Join太慢
我當前的查詢大約需要3秒鐘才能獲得條目,這將是一個問題,因爲我將在頁面中多次查詢多個營養素。任何幫助表示讚賞。
food_des - about 8,000 entries
+-------+---------+--------+
|NDB_No |Long_Desc|Fd_Group|
+-------+---------+--------+
|01001 |Banana |0100 |
|01002 |Apple |0102 |
+-------+---------+--------+
nut_data - about 600,000 entries
+-------+-------+--------+
|NDB_No |Nutr_No|Nutr_Val|
+-------+-------+--------+
|01001 |318 |55.5 |
|01001 |320 |1.1 |
|01002 |318 |30.2 |
|01002 |325 |12.3 |
+-------+-------+--------+
nut_def - about 150 entries
+-------+--------+-----+
|Nutr_No|NutrDesc|Units|
+-------+--------+-----+
|318 |Carbs |g |
|319 |Energy |kcal |
|320 |Protein |g |
|325 |Iron |mg |
+-------+--------+-----+
SELECT food_des.Long_Desc, nut_data.Nutr_Val, nutr_def.Units
FROM food_des
INNER JOIN nut_data
ON food_des.NDB_No=nut_data.NDB_No
INNER JOIN nutr_def
ON nut_data.Nutr_No=nutr_def.Nutr_No
WHERE nutr_def.NutrDesc="Vitamin D"
ORDER BY Nutr_Val DESC
LIMIT 5
你有你的表定義哪些索引? – eggyal 2015-03-02 16:40:38
對不起,唯一的索引是NDB_No在表中food_des – prince888 2015-03-02 17:01:21
你真的應該索引'nut_data':我建議至少一個簡單的索引超過'(NDB_No)',儘管一個最優方法可能涉及一個複合超過' NDB_No,Nutr_No)'和'nutr_def.Nutr_No'上的索引。如果您發現後續的性能仍然不可接受,請發佈您的執行計劃(「'EXPLAIN SELECT ...'」),我們可以考慮添加一些覆蓋索引。 – eggyal 2015-03-02 17:05:21