Hoi

Iemand ervaring hiermee? Dit zou sneller kunnen omgaan met grotere hoeveelheden data, dus ben ik benieuwd naar meningen van andere mensen hierover? :)

Bedankt :)
Wat Frank zegt is helemaal waar. Vaak als je bijvoorbeeld bij een index alleen titel en id nodig hebt, doen mensen toch
SELECT * FROM linktips

terwijl dit veel 'zuiniger' is:
SELECT id, titel FROM linktips
Oké, omschrijving van mijn queries:

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... :)
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 :)
Ik bedoel ook niet dat ze gelinkt zijn, maar dat er dus een relatie bestaat (bijvoorbeeld linktips.mid is leden.id)
Rafael:

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.
Maar kom je dan niet in de problemen te zitten als je het id wilt ophalen? Want die twee id velden hebben dezelfde naam.
Schematisch:

Tabel 1:
id, naam, bericht, datum, nickname
Tabel 2:
id, nickname, geslacht, rang
Tabel 3:
id, fotonaam

Hoe het zou moeten

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?
Sebastiaan schreef op 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.


Niet helemaal. Je hebt artiesten.id en je hebt cd.artiest_id
En in geval van twijfel zet je gewoon de tabelnaam ervoor. Ik doe het meestal zo:

Als ik verwijs naar een id in een andere tabel, schrijf ik tabelnaam-underscore-id, dus cd.artiest_id

Als ik verwijs naar een id van de huidige tabel, schrijf ik alleen id, dus artiest.id

Zo weet ik (en MySQL dus ook) altijd of ik naar de huidige of een externe tabel verwijs.
Dus kort samengevat:

- bij een bericht kan nickname leeg zijn
- bij een nickname kan foto leeg zijn

Zo op het eerste gezicht zou ik zeggen dat tabel 2 en 3 eigenlijk in 1 tabel zouden kunnen.

Reageren