Optimize ME!

Status
Niet open voor verdere reacties.

Flippuh

Gebruiker
Lid geworden
6 mrt 2008
Berichten
59
SELECT
MenuName,
Ingredients,
(
SELECT `Comment`
FROM `MenuComments`
WHERE `id`=MenuBindings.CommentId
)
AS Comments,
(
SELECT FORMAT(`value`, 2)
FROM `Prices`
WHERE `id`=MenuBindings.SmallPriceId
)
AS SmallPrice,
(
SELECT FORMAT(`value`, 2)
FROM `Prices`
WHERE `id`=MenuBindings.MediumPriceId
)
AS MediumPrice,
(
SELECT FORMAT(`value`, 2)
FROM `Prices`
WHERE `id`=MenuBindings.LargePriceId
)
AS LargePrice

FROM `Menus`
JOIN MenuBindings
ON Menus.id=MenuBindings.MenuId
WHERE MenuBindings.CompanyId=10
AND MenuBindings.SubmenuId=12


Sugesties?

Alvast bedankt
 
Ehhhh.... Wat is je vraag eigenlijk? :shocked:
 
De vraag is hoe de query kan geoptimaliseerd worden.

Hoewel een bewoording van wat je query moet doen wel handig zou zijn....
 
Mmmm das geen domme vraag,
Heb een sql export meegestuurd als test database, hier kan je de query op bekijken.

Het idee is dat deze database afgevuld wordt met alle menukaarten van nederland (ongeveer 1 miljoen menu items) vandaar de overdreven normalisatie.

Deze query haalt menuitems uit een genormaliseerde database en geeft de prijzen ervan weer.
Nu merk ik dat die subqueries gebruikt om de prijzen uit de db te halen erg lang duren en vroeg me af of ik dat niet beter kan oplossen met een soort join.

Iemand een idee?
 

Bijlagen

Je moet Prices and MenuComments met Menus joinen. Zo te zien moet je de tabel Prices een aantal keer joinen. Voor ieder prijsgroep een keer.

Een en ander is verder nog te versnellen door de juiste indexen aan te maken.

HTH:D
 
Mmmm indexes,.. klopt ja,.. moetst ik ook nog doen.

Ga eerst even proberen te joinen,... zal vast ook helpen.

Tof dankjewel!
 
Code:
SELECT 
	MenuName, 
	Ingredients, 
	MenuComments.Comment AS  Comments,
        FORMAT(Small.value, 2) AS SmallPrice,
	FORMAT(Medium.value, 2) AS MediumPrice,
	FORMAT(Large.value, 2) AS LargePrice
	FROM `MenuBindings` 
		RIGHT JOIN Menus 
			ON Menus.id=MenuBindings.MenuId
                LEFT JOIN Prices Small
                        ON MenuBindings.SmallPriceId=Small.id
                LEFT JOIN Prices Medium
                        ON MenuBindings.MediumPriceId=Medium.id
                LEFT JOIN Prices Large
                        ON MenuBindings.LargePriceId=Large.id
                LEFT JOIN MenuComments
                        ON MenuBindings.CommentId=MenuComments.id
	WHERE MenuBindings.CompanyId=$Id
		AND MenuBindings.SubmenuId=$MenuId

Tnx,...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan