WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Problem med en MySQL sökning (https://www.wn.se/forum/showthread.php?t=5324)

fabian 2005-01-05 03: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.

Thomas 2005-01-05 03:15

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

fabian 2005-01-05 03:34

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?

zoran 2005-01-05 09:04

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

grazzy 2005-01-05 13:27

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.

kullervo 2005-01-05 13:49

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.

fabian 2005-01-05 15:41

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?

kullervo 2005-01-05 15:49

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.

netflax 2005-01-05 16:40

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..

fabian 2005-01-05 19:46

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?


Alla tider är GMT +2. Klockan är nu 12:18.

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