webForumDet fria alternativet

Timeout på sql

12 svar · 320 visningar · startad av MoonCow

MoonCowMedlem sedan juni 2001223 inlägg
#1
SELECT polers.*, members.* FROM polers, members 

WHERE (members.username=polers.namn2 or members.username=polers.namn1) and namn1 = '" & session("namn") & "' or namn2 = '" & session("namn") & "' and accept = 'j' 

ORDER BY status DESC

Detta är en kod som ska joina in bla om personen är online i en "vännerlista" på en communty.
Det kan variera om man själv är på namn1 eller namn1 beroende på vem som startade "relationen".
Kan själv inte se vad som är fel. Men får en timeout pga att den tar sån tid att genomföra.
Vet nån :(?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Hur många poster finns det i tabellerna?
Vilka index/nycklar har du?

MoonCowMedlem sedan juni 2001223 inlägg
#3

members är väl ganska stor. typ 7000 poster. inte pytteliten men det bör väl mySQL klara? (glömmde btw säg att det var mySQL)
polers är på 30 000. ser jag nu. oj :( är det problemet?

båda har en indexnyckel som heter id.

MoonCowMedlem sedan juni 2001223 inlägg
#4

fast det är bara username.members och polers.namn1/polers.namn2 som är samma om man säger så.
förmodligen dom enda fälten som går att gämföra med joinen.

fast jag är ganska så ny på joins.

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Det där blir långsamt.

Om du vill fortsätta att använda namn i båda tabellerna så bör du lägga till ett unikt index på namn i memberstabellen och även ett unikt index på namn1,namn2 is polerstabellen samt ett separat index på namn2. Om du gör så finns det ingen anledning att ha med id överhuvudtaget i någon av tabellerna.

Alternativet är att inte lagra namn i polers utan att använda id där vilket har den fördelen att det underlättar att byta namn. Du behöver då motsvarande index.

MoonCowMedlem sedan juni 2001223 inlägg
#6

Tackar! Får fundera över alternativen.
Btw, du är kung :).

MoonCowMedlem sedan juni 2001223 inlägg
#7

[edit]

MoonCowMedlem sedan juni 2001223 inlägg
#8

Vi kanske kan ta ett enklare exempel?

Jag har en tabell som heter [gb] (med gästboksinlägg i) och även i denna finns det en kollumn som kommer ha samma värde som en kollumn i [members].

Vad ska jag göra i mySQL-front för att snabba upp processen av när datan ska hämtas.
Koden ser ut såhär just nu (funkar, men kanske lite segt).

q = "SELECT gb.id, gb.last, gb.mess, gb.nowen, gb.fran, members.status, members.stad, members.alder, members.bildurl, members.bildstatus, members.nickhex FROM gb, members WHERE members.username=gb.fran and gb.motagare = '" & usergastbok & "' ORDER BY Nowen DESC"
LarsGMedlem sedan dec. 200012 464 inlägg
#9

Hur man gör i Mysql front vet jag inte. Jag kan bara SQL

create unique index membersUnique on members(username)

create index gbfran on guestbook(fran)

create index gbmot on guestbook(mottagare)
MoonCowMedlem sedan juni 2001223 inlägg
#10

Att du kallar guestbook(fran) gbfran behöver jag inte ändra i sql-satsen eller?

MoonCowMedlem sedan juni 2001223 inlägg
#11

Antingen så är det jag som inbillar mig eller så går det grymmt mycket snabbare nu =D!
Tack en herrans massa! U made my day m8!

LarsGMedlem sedan dec. 200012 464 inlägg
#12

Namnet på indexet behövs bara om du vill ta bort det av någon anledning.

drop index gbfran
MoonCowMedlem sedan juni 2001223 inlägg
#13

I see. Tnx :)

124 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)