帮助优化SQL查询
问题描述:
嗨,我需要一些帮助解决这个问题。 我正在使用web应用程序和数据库我使用sqlite。有人可以帮助我从一个DATABSE查询必须优化==快速=)帮助优化SQL查询
我有表X:
ID | ID_DISH | ID_INGREDIENT
1 | 1 | 2
2 | 1 | 3
3 | 1 | 8
4 | 1 | 12
5 | 2 | 13
6 | 2 | 5
7 | 2 | 3
8 | 3 | 5
9 | 3 | 8
10| 3 | 2
.... ID_DISH是不同的菜肴ID,ID_INGREDIENT是其中的成分所以在我的情况菜 ID为1与IDS 2,3
在这个表中有更多然后15000行食材制成的,我的问题是::这道菜由
我需要查询这将取在这里我可以找到由我不知道添加到我的算法中的ingreedients ASC计数的菜肴ID。
examle:FOO(2,4) 将按此顺序行:
ID_DISH | count(stillMissing)
10 | 2
1 | 3
碟ID 10具有id为2和4成分和还没有得到2个,然后是
我的查询是:
SELECT
t2.ID_dish,
(SELECT COUNT(*) as c FROM dishIngredient as t1
WHERE t1.ID_ingredient NOT IN (2,4)
AND t1.ID_dish = t2.ID_dish
GROUP BY ID_dish) as c
FROM dishIngredient as t2
WHERE t2.ID_ingredient IN (2,4)
GROUP BY t2.ID_dish
ORDER BY c ASC
的作品,但它是缓慢....
答
select ID_DISH, sum(ID_INGREDIENT not in (2, 4)) stillMissing
from x
group by ID_DISH
having stillMissing != count(*)
order by stillMissing
这是解决方案,我以前的查询工作5 - 20年代这项工作80ms左右
答
这是从MEM ory,因为我不知道sqlite的SQL方言。
SELECT DISTINCT T1.ID_DISH, COUNT(T1.ID_INGREDIENT) as COUNT
FROM dishIngredient as T1 LEFT JOIN dishIngredient as T2
ON T1.ID_DISH = T2.ID_DISH
WHERE T2.ID_INGREDIENT IN (2,4)
GROUP BY T1.ID_DISH
ORDER BY T1.ID_DISH
+1发明了 'optimazing'。哪个国际海事组织应该表示“执行惊人的优化”。 – karim79 2011-01-06 20:50:38
你在该表上添加了什么索引? – zsong 2011-01-06 21:17:01