SELECT
tabel1.naam, tabel1.bericht, tabel1.nickname,
tabel2.avatar, tabel2.geslacht, tabel2.rang
FROM
tabel1
LEFT JOIN
tabel2 ON (tabel1.nickname = tabel2.nickname)
WHERE
(tabel1.user_id = '" . $waarde . "')
ORDER BY
tabel1.id DESC LIMIT " . $start_waarde . ", " . $max);
Zoiets had ik gemaakt, geeft een query van 0.9s, wat me toch lang lijkt.
Link gekopieerd
?
Onbekende gebruiker
29-11-2005 17:53
SELECT
t.naam, t.bericht, t.nickname,
f.avatar, f.geslacht, f.rang
FROM
tabel1 t
LEFT JOIN
tabel2 f ON (t.nickname = f.nickname)
WHERE
(t.user_id = '" . $waarde . "')
ORDER BY
t.id DESC LIMIT " . $start_waarde . ", " . $max);
Probeer deze eens. Volgens mij ligt het niet aan de joins dat je query langzaam is. Mijn left joins gaan altijd net zo snel als een gewone query.
Link gekopieerd
Ja, ik denk dat dat komt omdat hij strings moet vergelijken. Normaal gesproken vergelijk je id's of zo, en dat zijn meestal INT's.
Link gekopieerd
Toon Records 0 - 9 (10 totaal, Query duurde 0.8932 sec)
Nog steeds vrij lang naar mijn mening, kan onmogelijk aan de tabel liggen, want ik test op een tabel met maar 50 records in :-/
Link gekopieerd
Jan Koehoorn schreef op 29.11.2005 17:56
Ja, ik denk dat dat komt omdat hij strings moet vergelijken. Normaal gesproken vergelijk je id's of zo, en dat zijn meestal INT's.
Kan ik wel oplossen, zal het eens even testen, dat ik enkel IDs vergelijk, even een paar velden aanpassen dan.
Link gekopieerd
?
Onbekende gebruiker
29-11-2005 18:16
Daar heb je dus geen PostgreSQL voor nodig! Sterker nog, in PostgreSQL zou je hetzelfde probleem hebben gehad.
Zo zie je maar weer eens dat performance-problemen vrijwel zonder uitzondering liggen aan de manier waarop je met de database omgaat.
Het blijft overigens wel een goed plan om eens naar PostgreSQL te kijken, maar dan wel om hele andere redenen.
Link gekopieerd
@ Rafael: dank je!
Ik heb nog even gekeken welke tabelstructuur voor mij het meest logisch zou zijn:
tabel users
-------------
id
naam
nickname
geslacht
rang
fotonaam
tabel berichten
-----------------
id
bericht
datum
user_id
als het zo ingericht zou zijn, zou deze query het snelst zijn, denk ik:
SELECT
berichten.bericht, berichten.datum,
users.naam, users.nickname, users.fotonaam
FROM users
RIGHT JOIN
berichten ON users.id = berichten.user_id;
Link gekopieerd
?
Onbekende gebruiker
29-11-2005 18:30
Right join? Waarom dat sneller?
Link gekopieerd
Daar heb je dus geen PostgreSQL voor nodig! Sterker nog, in PostgreSQL zou je hetzelfde probleem hebben gehad.
Zo zie je maar weer eens dat performance-problemen vrijwel zonder uitzondering liggen aan de manier waarop je met de database omgaat.
Het blijft overigens wel een goed plan om eens naar PostgreSQL te kijken, maar dan wel om hele andere redenen.
Klopt, ik had me gewoon te snel laten wijsmaken dat dat de problemen al zou verhelpen.
@Jan: Het moeilijke is, dat de meeste tabellen al redelijk wat records bevatten, dus nu nog gaan spelen met de ganse structuur, zou moeilijker worden.
Maar, het is een nieuwe uitdaging, voor de volgende versie van die site :D
Link gekopieerd