Ahojte, mám čtyři tabulky, kde v první tabulce jsou údaje o produktech a obsahuje, mimo jiné, sloupce:
vyrobce, serie
K tomu existují další dvě tabulky výrobců a sérií, a neexistuje výrobek s neexistujícím výrobcem nebo sérií.
Dále mám tabulku s obrázky, kde ke každému výrobku existuje 0 nebo více obrázků. V této tabulce je dáno id výrobku.
Ve výsledku potřebuji dostat tabulku všech výrobků se jmény výrobců, sérií a je-li obrázek, tak s prvním, jinak bez obrázku (produkty prostě musí být všechny). Chtěl bych se zeptat, jak nejlépe spojit tyto údaje z hlediska rychlosti. Jedná se asi o 10000 záznamů.
SELECT `vyrobky`.`nazev`, `vyrobci`.`jmeno`, `serie`.`nazev`, `obrazky`.`soubor`
FROM `vyrobky`, `vyrobci`, `serie`, `obrazky`
WHERE `vyrobky`.`vyrobce` = `vyrobci`.`id`
AND `vyrobky`.`serie` = `serie`.`id`
AND `obrazky`.`vyrobek` = `vyrobky`.`id`
GROUP BY `vyrobky`.`id`
- toto je dost rychlé, ale samozřejmě to nesplní účel, protože není-li obrázek, dotaz nevrátí výrobek
SELECT `vyrobky`.`nazev`, `vyrobci`.`jmeno`, `serie`.`nazev`, `obrazky`.`soubor`
FROM `vyrobky` LEFT JOIN `vyrobci` ON `vyrobky`.`vyrobce` = `vyrobci`.`id`
LEFT JOIN `serie` ON `vyrobky`.`serie` = `serie`.`id`
LEFT JOIN `obrazky` ON `obrazky`.`vyrobek` = `vyrobky`.`id`
GROUP BY `vyrobky`.`id`
- a tohle je zase PŘÍŠERNĚ pomalé
Mám tedy dvě otázky.
První je taková hodně začátečnická - jaký je rozdíl mezi "čárkovanou formou" vnitřního spojení a použitím klíčového slova INNER JOIN?
Druhá je ohledně té rychlosti. Jak to nejlépe provést z hlediska rychlosti? Zkombinovat vnitřní a vnější spojení? Jak? Proč je vlastně vnější spojení o tolik pomalejší, než vnitřní?
Děkuji :-)