Avatar billede 60bitarne Nybegynder
08. maj 2009 - 17:36 Der er 10 kommentarer

mysql 4 nested query

Jeg har en query.  Som virker fint nok i mysql 5.x . Problemet er bare, at på det webhotel hvor jeg skal bruge den, der virker den ikke.På webhoteller er version 4.0.21.

Min forespørgsel ser sådan her ud:
SELECT *,(SELECT sum_hits FROM tmp WHERE linkid=id)
FROM links
ORDER BY hits_month DESC
LIMIT 10

Der er 2 tabeller. En hvor der står noget generelt om linksne (links) og en hvor der står noget om de enkelte hits. (tmp).

Er der nogen der ved hvad man kan gøre istedet?
Jeg har prøvet med følgende query: Den er bare utrolig langsom i forhold til den anden:
SELECT *
FROM links
LEFT JOIN tmp ON (links.id=tmp.linkid)
ORDER BY hits_month DESC
LIMIT 10
Avatar billede arne_v Ekspert
08. maj 2009 - 17:43 #1
Din join ser fin ud.

Hvis du laver index paa links.id og tmp.linkid saa tror jeg ogsaa at performance bliver OK.
Avatar billede 60bitarne Nybegynder
08. maj 2009 - 18:07 #2
Jeg har lavet index på dem begge. Eller på den ene. da den anden allerede var primary key.

Faktisk ser den langsom sql sådan her ud.. Det andet var noget jeg havde lavet da jeg prøvede at lave et view og så joine på det:
SELECT *,SUM(lh.hint) AS hsum
FROM links_hint AS lh
LEFT JOIN links AS l ON(l.id=lh.linkid)
GROUP BY lh.linkid ORDER BY hsum DESC LIMIT 10

Den tager ca 4000ms at køre..

Hvor:
SELECT *,(SELECT SUM(hint) FROM links_hint WHERE links_hint.linkid=links.id) AS total_hits
FROM links
ORDER BY total_hits DESC

tager ca 500ms at køre.

Jeg kan ikke lige finde på nettet om det er muligt at lave nested queries i mysql 4. er det det?
Avatar billede arne_v Ekspert
08. maj 2009 - 18:26 #3
Subselects kraever 4.1 eller nyere.
Avatar billede arne_v Ekspert
08. maj 2009 - 18:27 #4
Hvor mange raekker er der i de tabeller?
Avatar billede 60bitarne Nybegynder
08. maj 2009 - 18:32 #5
har ca 5000 i links
og ca 13700 i links_hint
Avatar billede 60bitarne Nybegynder
08. maj 2009 - 19:00 #6
Det skal også siges at det også er MyISAM taballer. Men det kan måske godt være at man virkelig ikke kan lave en bedre/hurtigere query.
Avatar billede arne_v Ekspert
11. maj 2009 - 02:47 #7
Hvad fortæller EXPLAIN ?
Avatar billede arne_v Ekspert
11. maj 2009 - 02:47 #8
Det er lidt mystisk fordi det er ikke ret mange rækker.
Avatar billede 60bitarne Nybegynder
11. maj 2009 - 22:08 #9
Har ikke prøvet at bruge explain før, men her er hvad jeg fik tilbage.

http://thinus.net/grafik/explain_queries.PNG
Avatar billede arne_v Ekspert
17. maj 2009 - 04:22 #10
Mystisk. Som jeg læser de EXPLAIN's så burde join'en være hurtigst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester