Ik heb twee tabellen:
orders: ID, klantId, deadline
orderregels: orderId, productId, aantal
Orders bevat 10.000 rijen, orderregels ongeveer 300.000
Nu draai ik de volgende query:
(de ... geven aan dat de rij doorloopt, dus van 1 t/m 1200 en van 1 t/m 400)
En krijg ik als output:
M.a.w. deze query is langzaaaaaaam. Maar nu de vraag: hoe kan ik hem optimaliseren? Ik heb al een aantal indices gemaakt voor orderregels: orderId, productId en orderId_2 (=orderId+productId), maar hij blijft als key NULL geven.
orders: ID, klantId, deadline
orderregels: orderId, productId, aantal
Orders bevat 10.000 rijen, orderregels ongeveer 300.000
Nu draai ik de volgende query:
SQL:
1
2
3
4
5
| EXPLAIN SELECT SUM(aantal) FROM orderregels LEFT JOIN orders ON (orders.ID=orderregels.orderId) WHERE orders.klantId IN (1, 2, 3, .... 1200) AND orders.deadline<'2010-01-01' AND orders.deadline>'2011-12-31' AND orderregels.productId IN (1, 2, 3, ... 400) |
(de ... geven aan dat de rij doorloopt, dus van 1 t/m 1200 en van 1 t/m 400)
En krijg ik als output:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | orderregels | ALL | orderId,productId,orderId_2 | NULL | NULL | NULL | 290822 | Using where |
1 | SIMPLE | orders | ref | PRIMARY,klantId,ID | ID | 4 | orderregels.orderId | 1 | Using where; Using index |
M.a.w. deze query is langzaaaaaaam. Maar nu de vraag: hoe kan ik hem optimaliseren? Ik heb al een aantal indices gemaakt voor orderregels: orderId, productId en orderId_2 (=orderId+productId), maar hij blijft als key NULL geven.