Kom ihåg mig?
Home Menu

Menu


Problem med en MySQL sökning

 
Ämnesverktyg Visningsalternativ
Oläst 2005-01-05, 03:04 #1
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
Har efter mycket jobb fått ordning på min bråkande Mysql server som givetvis berodde på dålig kod och annat egenomtänkt (Köpte ett script som jag jobbat vidare på själv).

Den enda sak som mysql inte verkar släppa igenom är följande fråga:
Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25

Om mysql får den så står den helt still tills jag dödar frågan eller startar om mysqld´n. Jag har två frågor.

1.) Vad är det för fel på frågan?

2.) Hur får jag mysql att döda frågor som tar mer än X antal sekunder?
Trodde att det var: set-variable = wait_timeout=10
i my.cnf, men det var det visst inte, kan utan problem få denna fråga att ta flera tusen sekunder utan att den avbryts.
fabian är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 03:15 #2
Thomass avatar
Thomas Thomas är inte uppkopplad
Administratör
 
Reg.datum: May 2003
Inlägg: 3 901
Thomas Thomas är inte uppkopplad
Administratör
Thomass avatar
 
Reg.datum: May 2003
Inlägg: 3 901
Citat:
Originally posted by fabian@Jan 5 2005, 03:04
Trodde att det var: set-variable = wait_timeout=10
i my.cnf, men det var det visst inte ...
Du har väl inte glömt att starta om sql-servern efter ändrigen. Sånt kan ju hända den bäste 03:04 en onsdagsmorgon.

Thomas
Thomas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 03:34 #3
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
Citat:
Ursprungligen postat av Thomas
Citat:
Ursprungligen postat av fabian
Trodde att det var: set-variable = wait_timeout=10
i my.cnf, men det var det visst inte ...
Du har väl inte glömt att starta om sql-servern efter ändrigen. Sånt kan ju hända den bäste 03:04 en onsdagsmorgon.

Thomas
Hehe, nej, jag har startat om den.

(Var dock tvungen att göra det ännu en gång för att vara helt säker)

Finns det något sätt att se så att mysql servern verkligen läser rätt configfil?
fabian är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 09:04 #4
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by fabian@Jan 5 2005, 04:04
Har efter mycket jobb fått ordning på min bråkande Mysql server som givetvis berodde på dålig kod och annat egenomtänkt (Köpte ett script som jag jobbat vidare på själv).

Den enda sak som mysql inte verkar släppa igenom är följande fråga:
Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25

Om mysql får den så står den helt still tills jag dödar frågan eller startar om mysqld´n. Jag har två frågor.

1.) Vad är det för fel på frågan?

2.) Hur får jag mysql att döda frågor som tar mer än X antal sekunder?
Trodde att det var: set-variable = wait_timeout=10
i my.cnf, men det var det visst inte, kan utan problem få denna fråga att ta flera tusen sekunder utan att den avbryts.
Jag fattar bara inte varför du gör select i imagetable (som förmodligen innehåller massa binärdata) när du ändå inte använder värdena i din select.

/Zoran
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 13:27 #5
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Fabian, du har väl inte glömt att indexera alla fälten du gör sökningar i? Sen så "kan" det nog vara dumt att göra '' runt heltal.
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 13:49 #6
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Testa kör REPAIR och sedan OPTIMIZE.

Vilken verision av MySQL kör du? 4.1-serien är fortfarande mycket buggig. Jag har åkt på 3 buggar än så länge. 2 är fixade i 4.1.8 och igår hittade jag den tredje.

Citat:
Finns det något sätt att se så att mysql servern verkligen läser rätt configfil?
/etc/my.cnf är första platsen som mysqld letar efter inställningsfil. Den gäller alltså i första hand.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 15:41 #7
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
Citat:
Jag fattar bara inte varför du gör select i imagetable (som förmodligen innehåller massa binärdata) när du ändå inte använder värdena i din select.
Imagetable innehåller:
Namn på den som äger bilden
URL till bilden
Kategori bilden ligger i
Din senaste 10 poängen bilden fått
Dom senaste 5 IP addresser som röstat på bilden
Bildens poäng
etc. etc.


Citat:
Fabian, du har väl inte glömt att indexera alla fälten du gör sökningar i? Sen så "kan" det nog vara dumt att göra '' runt heltal.
Alla fälten som söks i är indexerade. Finns det något sätt att "updatera" indexeringen? För precis när jag gjort indexeringen flöt sajten på jätefint...
Har provat att ta bort citationstecknerna runt heltalen, men fortfarande samma problem.


Citat:
Testa kör REPAIR och sedan OPTIMIZE.
Nu är det gjort, utan någon märkbar skillnad.


Citat:
Vilken verision av MySQL kör du? 4.1-serien är fortfarande mycket buggig. Jag har åkt på 3 buggar än så länge. 2 är fixade i 4.1.8 och igår hittade jag den tredje.
Jag körde på 4.1.7, men har nu uppgraderat till 4.1.8



Några andra idéer?
fabian är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 15:49 #8
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by fabian@Jan 5 2005, 15:41
Citat:
Vilken verision av MySQL kör du? 4.1-serien är fortfarande mycket buggig. Jag har åkt på 3 buggar än så länge. 2 är fixade i 4.1.8 och igår hittade jag den tredje.
Jag körde på 4.1.7, men har nu uppgraderat till 4.1.8



Några andra idéer?
Prova köra koden på senaste ur 4.0-serien.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 16:40 #9
netflax netflax är inte uppkopplad
Medlem
 
Reg.datum: Aug 2004
Inlägg: 88
netflax netflax är inte uppkopplad
Medlem
 
Reg.datum: Aug 2004
Inlägg: 88
Citat:
Originally posted by fabian@Jan 5 2005, 04:04
Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
I och med att du hämtar data från imagetable också så kommer du att indirekt joina alla records med varandra. Alla records i usertable joinas med imagetable... därför tar det lite tid...

Prova istället att använda följande:

Kod:
select usertable.name, usertable.category from usertable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
alternativt

Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' AND usertable.id = imagetable.userid GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
(OBS! Ändra i sista SQL-satsen så att usertable.id och imagetable.userid är korrekta fält i din tabell, men i ditt fall råder jag dig ändå att välja det första alternativet)

Testa och återkom, men det där borde fixat..
netflax är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-05, 19:46 #10
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
Citat:
Ursprungligen postat av netflax
Citat:
Ursprungligen postat av fabian
Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
I och med att du hämtar data från imagetable också så kommer du att indirekt joina alla records med varandra. Alla records i usertable joinas med imagetable... därför tar det lite tid...

Prova istället att använda följande:

Kod:
select usertable.name, usertable.category from usertable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
alternativt

Kod:
select usertable.name, usertable.category from usertable, imagetable WHERE usertable.category = 'Tjejer' AND usertable.age >= '17' AND usertable.age <= '24' AND usertable.id = imagetable.userid GROUP BY usertable.name ORDER BY usertable.name LIMIT 25
(OBS! Ändra i sista SQL-satsen så att usertable.id och imagetable.userid är korrekta fält i din tabell, men i ditt fall råder jag dig ändå att välja det första alternativet)

Testa och återkom, men det där borde fixat..
Wow, det första exemplet du gav fixade det! Tusen miljoner tack. Vad var den egentliga skillnaden?
fabian är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017