Ik probeer een efficientere code te vinden voor een selectie uit twee tabellen.
Nadeel: 12 seconden om uit te voeren.
Nadeel: 0,4 seconden om uit te voeren
Werkt.
Klein nadeel: 0,1 seconden
Nu moet ik deze query 2 keer uitvoeren, en ik vraag me af of de query wel zo efficient is omdat ik in de subquery eerst alle 18000 records door moet lopen...
- Tabel 1 (products) bevat productinfo, tabel 2 (stock) bevat leverancier, voorraad en prijs.
- Voor ieder product zijn er 1 of meerdere leveranciers met verschillende voorraad en verschillende prijzen.
- Het veld genaamd ean koppelt de records uit beide tabellen (foreign key)
- De klant krijgt de laagste prijs, maar totale voorraad te zien.
- Er kan door klanten een selectie gemaakt worden, bijv kleur=rood. Deze gegevens zitten alleen volledig juist in de products table.
- Products bevat 8000 rijen, stock bevat 18000 rijen
code:
Deze code werkt, en haalt exact op wat ik wil.1
2
3
4
5
| SELECT p.*, totalStock, minprice FROM products p LEFT OUTER JOIN (SELECT s.ean, SUM(sstock) as totalStock, min(price) as minprice FROM stock s GROUP BY s.ean) sp on sp.ean = p.ean ORDER BY sp.minprice |
Nadeel: 12 seconden om uit te voeren.
code:
Deze code werkt, haalt op wat ik wil.1
2
3
4
5
6
7
| SELECT p . * , c.totalStock, c.minprice FROM products p INNER JOIN (SELECT ean, SUM(sstock ) AS totalStock, MIN( price ) AS minprice FROM stock GROUP BY ean ) c ON p.ean = c.ean ORDER BY c.minprice |
Nadeel: 0,4 seconden om uit te voeren
code:
1
2
3
4
| SELECT p.*, c.totalStock, c.minprice FROM (SELECT SUM(sstock) AS totalStock, ean, MIN(price) AS minprice FROM stock GROUP BY ean) c INNER JOIN products p ON p.ean = c.ean ORDER BY c.minprice |
Werkt.
Klein nadeel: 0,1 seconden
Nu moet ik deze query 2 keer uitvoeren, en ik vraag me af of de query wel zo efficient is omdat ik in de subquery eerst alle 18000 records door moet lopen...