Beste Tweakers,
Ik ben vaak bezig met het ontwerpen van php/mysql/ajax gebaseerde CMS systemen, meestal gewoon als hobby. Nu maak ik zelf vaak gebruik van relatief simpele SQL query's bijvoorbeeld:
Een query om alle pagina's weer te geven voor het menu,
Een query om de Artikelen die zich in een bepaalde pagina bevinden te laden,
Een query voor elk artikel om de bijbehorende data binnen te halen.
Soms gebruik ik zelfs wel eens een query om alleen een username aan de hand van een userID te achterhalen. Op deze manier wil het echter wel eens voorkomen dat een frontpage zo'n 15 query's nodig heeft en een complexere pagina bijvoorbeeld forum kan wel eens zo'n 50 query's laden.
Simpel om te computen voor de SQL server dacht ik altijd, ik heb hier verder ook nooit echt performance problemen mee gemerkt, normaal laad een pagina met 40 query's op de server die ik gebruik binnen enkele honderdsten van een seconde. Nu lees ik echter zo hier en daar op een forum dat mensen zich al zorgen maken als het aatal query's per pagina boven de 8 uit komt en sommigen zweren zelfs bij max 3 query's per pagina.
Mijn eerste vraag is aan de experts is dit echt nodig? wat gaat er mis als ik mijn methode blijf volgen?
Vervolgens zat ik te bedenken, als ik het aantal query's wil reduceren dan worden de query's aardig complex, en ook de output wordt enorm. Ik maak bijvoorbeeld voor een normale pagina gebruik van een database structuur in boom vorm van 4 lagen diep. Als mij dan aan de limit van 3 query's per pagina probeer te houden zou ik bijvoorbeeld met een volgende query kunnen werken om alle pagina data te laden:
SELECT L1.name,L1.title,L1.blaawathever,L2.name,L2.data,L3.name,L3.data,L4.name,L4.data FROM L1 INNER JOIN (L2 INNER JOIN (L3 INNER JOIN L4 ON L4.l3ID = L3.l3ID) ON L3.l2ID = L2.l2ID) ON L2.l1ID = L1.l1ID WHERE L1.l1ID = xx AND L4.language = NL;
Bijvoorbeeld dus (normaal gebruik ik wel fatsoenlijke namen voor de tabellen ;-) )
Deze query levert een enorme resultset op waarin ik niet echt een makkelijke manier weet om er snel data uit te halen in php behalve dan met for lussen te gaan scannen. Deze oplossing lijkt mij niet de manier om query's te minderen.
Mijn vragen hierbij zijn:
1: Wat is wijsheid? heeft het zin om met grote complexe query's het aantal terug te dringen?
2: Is er een manier om in PHP makkelijker deze grote resultsets te doorzoeken?
3: Hoe kijken jullie tegen mijn vraag aan? als ik totaal op het verkeerde spoor zit laat me dan weten hoe het wel kan (of geef in ieder geval een hint in de goede richting).
Overigens ben ik niet van plan om bestaande CMS systemen te gaan gebruiken om dit probleem op te lossen, niet omdat ze niet goed zijn, maar omdat de kern van deze vraag hem in het ontwikkelen zelf zit en niet in de oplossing om snel een site te lanceren.
Ik ben vaak bezig met het ontwerpen van php/mysql/ajax gebaseerde CMS systemen, meestal gewoon als hobby. Nu maak ik zelf vaak gebruik van relatief simpele SQL query's bijvoorbeeld:
Een query om alle pagina's weer te geven voor het menu,
Een query om de Artikelen die zich in een bepaalde pagina bevinden te laden,
Een query voor elk artikel om de bijbehorende data binnen te halen.
Soms gebruik ik zelfs wel eens een query om alleen een username aan de hand van een userID te achterhalen. Op deze manier wil het echter wel eens voorkomen dat een frontpage zo'n 15 query's nodig heeft en een complexere pagina bijvoorbeeld forum kan wel eens zo'n 50 query's laden.
Simpel om te computen voor de SQL server dacht ik altijd, ik heb hier verder ook nooit echt performance problemen mee gemerkt, normaal laad een pagina met 40 query's op de server die ik gebruik binnen enkele honderdsten van een seconde. Nu lees ik echter zo hier en daar op een forum dat mensen zich al zorgen maken als het aatal query's per pagina boven de 8 uit komt en sommigen zweren zelfs bij max 3 query's per pagina.
Mijn eerste vraag is aan de experts is dit echt nodig? wat gaat er mis als ik mijn methode blijf volgen?
Vervolgens zat ik te bedenken, als ik het aantal query's wil reduceren dan worden de query's aardig complex, en ook de output wordt enorm. Ik maak bijvoorbeeld voor een normale pagina gebruik van een database structuur in boom vorm van 4 lagen diep. Als mij dan aan de limit van 3 query's per pagina probeer te houden zou ik bijvoorbeeld met een volgende query kunnen werken om alle pagina data te laden:
SELECT L1.name,L1.title,L1.blaawathever,L2.name,L2.data,L3.name,L3.data,L4.name,L4.data FROM L1 INNER JOIN (L2 INNER JOIN (L3 INNER JOIN L4 ON L4.l3ID = L3.l3ID) ON L3.l2ID = L2.l2ID) ON L2.l1ID = L1.l1ID WHERE L1.l1ID = xx AND L4.language = NL;
Bijvoorbeeld dus (normaal gebruik ik wel fatsoenlijke namen voor de tabellen ;-) )
Deze query levert een enorme resultset op waarin ik niet echt een makkelijke manier weet om er snel data uit te halen in php behalve dan met for lussen te gaan scannen. Deze oplossing lijkt mij niet de manier om query's te minderen.
Mijn vragen hierbij zijn:
1: Wat is wijsheid? heeft het zin om met grote complexe query's het aantal terug te dringen?
2: Is er een manier om in PHP makkelijker deze grote resultsets te doorzoeken?
3: Hoe kijken jullie tegen mijn vraag aan? als ik totaal op het verkeerde spoor zit laat me dan weten hoe het wel kan (of geef in ieder geval een hint in de goede richting).
Overigens ben ik niet van plan om bestaande CMS systemen te gaan gebruiken om dit probleem op te lossen, niet omdat ze niet goed zijn, maar omdat de kern van deze vraag hem in het ontwikkelen zelf zit en niet in de oplossing om snel een site te lanceren.