Ik selecteer een groot deel uit de grootste tabel, die van 40mb dus, deze resultaten limiteer ik per 10 (10 per pagina dus). In deze loop, selecteer ik adhv een id uit de loop, uit 2 andere tabellen nog een gegeven, deze tabellen zijn 1.6mb en 928kb. Blijkbaar duurt deze hele loop te lang, waardoor de eerste query aanzien wordt als een "trage".
Schets:
<?php
hoofdquery in tabel 1
loop maken door tabel 1, 10 resultaten per keer {
2 velden uit tabel 2
1 veld uit tabel 3
}
?>
Als ik dit op een simpelere/betere manier zou kunnen doen, hoor ik het ook graag, kan ook best zijn dat ik de verkeerde manier hanteer..
Edit: @Sebastiaan: ik gebruik nooit een * in mn query, selecteer altijd alleen de velden die ik echt nodig heb... :)
?
Onbekende gebruiker
29-11-2005 15:16
Ik had het ook wat Frank zei over het 'verkeerd gebruiken van de db'
Maar kan jouw query niet in één keer mbv JOINs?
Want als ik het goed begrijp heeft jouw record dus een relatie met een andere tabel?
Deze zijn niet gelinkt, maar ik zoek in de andere tabellen adhv een nummer, die uit de eerste tabel komt.
Ik zal eens even wat gaan zoeken over joins dan :)
?
Onbekende gebruiker
29-11-2005 15:29
Ik bedoel ook niet dat ze gelinkt zijn, maar dat er dus een relatie bestaat (bijvoorbeeld linktips.mid is leden.id)
zoiets kan meestal sneller ook zonder joins.
Stel je hebt een tabel met CD's en eentje met artiesten.
tabel cd:
id
titel
artiest_id
tabel artiesten:
id
naam
dan kun je zo'n query maken:
SELECT cd.titel, artiesten.naam
FROM cd, artiesten
WHERE cd.artiest_id = artiest.id
ORDER by artiesten.naam ASC, cd.titel ASC
Je hoeft dus niet eerst een query te doen om de CD op te halen en dan een volgende om de goeie artiest er bij te zoeken. Ik weet niet of dit op jouw situatie van toepassing is en misschien wist je dit allang maar voor de zekerheid vermeld ik het maar even ;-)
edit: post anders ff je tabelstructuur, dan kijken we of we het kunnen optimaliseren.
?
Onbekende gebruiker
29-11-2005 15:34
Maar kom je dan niet in de problemen te zitten als je het id wilt ophalen? Want die twee id velden hebben dezelfde naam.
De records uit Tabel 1 uitlezen.
Het veld nickname uit Tabel 1, gebruik ik om uit Tabel 2 te selecteren. Het veld id dat dan uit Tabel 2 komt, gebruik ik om uit Tabel 3 te selecteren.
Maar, het kan zijn dat er in Tabel 2 niets gevonden wordt, dus valt het hieropvolgende weg.
Ook kan het zijn dat er in Tabel 3 niets gevonden wordt, waardoor ik een leeg resultaat zou krijgen.
Dit is waarschijnlijk een onlogische (Volgens sommige waarschijnlijk ook een slechte) opbouw?