Kom ihåg mig?
Home Menu

Menu


mySQL optimering

 
Ämnesverktyg Visningsalternativ
Oläst 2003-12-02, 12:53 #11
clindh clindh är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2003
Inlägg: 6
clindh clindh är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2003
Inlägg: 6
Jag läste på lite; det är bara när man sorterar på flera kolumner och blandar ASC och DESC som mySQL inte kan att använda befintliga index vid sorteringen. Men kör EXPLAIN på frågan vettja och se vad optimerarn tar för beslut.
clindh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-02, 14:36 #12
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Citat:
Originally posted by clindh@Dec 2 2003, 10:53
Jag läste på lite; det är bara när man sorterar på flera kolumner och blandar ASC och DESC som mySQL inte kan att använda befintliga index vid sorteringen. Men kör EXPLAIN på frågan vettja och se vad optimerarn tar för beslut.
Jo, men har du nån aning om varför det tar så lång tid att sortera? Det är ju bara 10 rader, borde inte ta lång tid...
Anders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-02, 15:31 #13
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
Om man kör EXPLAIN (lite svårt att läsa detta ...):

Kod:
table type possible_keys key key_len ref rows Extra 
inloggs index user_id PRIMARY 4 NULL 131535  
members eq_ref PRIMARY PRIMARY 3 inloggs.user_id 1
tror problemet är att ORDER BY körs på alla rader ,dvs 131535 st
men det konstiga är att order by på samma tabell utan en join går mycket snabbare..

Jag behöver alltså göra en order by i SQL eftersom jag endast vill ha ut dessa 10 rader och det måste vara ORDER BY DESC..annars får jag ut de första inloggningarna.
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-02, 22:50 #14
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Citat:
Ursprungligen postat av danjel
tror problemet är att ORDER BY körs på alla rader ,dvs 131535 st
men det konstiga är att order by på samma tabell utan en join går mycket snabbare..
Jo, men då är det JOIN som tar tid, inte ORDER BY.
Men man tycker det borde gå att göra så att den sorterar efter den hämtat ut rätt rader. Då har den ju inte lika mycket att sortera. Men det får man ju isf ta med MySQL AB...

Citat:
Ursprungligen postat av danjel
Jag behöver alltså göra en order by i SQL eftersom jag endast vill ha ut dessa 10 rader och det måste vara ORDER BY DESC..annars får jag ut de första inloggningarna.
Fanns det möjlighet att rensa lite i inloggs-tabellen? Det snabbar ju upp...
Anders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-03, 17:09 #15
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
nja, alltså frågan med join men utan order by går snabbt..typ:

"select * from inloggs,members where m.id=i.id limit 10"

och om jag kör typ:

"select * from inloggs order by id desc limit 10"

går också det snabbt på dessa 130 000 rader...

Men, så fort man lägger in en join med order by går det segt, kanske kör den order by på 130 000 * 6000 rader eller nåt skumt
(om du förstår den förklaringen )
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-04, 16:04 #16
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Citat:
Originally posted by danjel@Dec 3 2003, 15:09
Men, så fort man lägger in en join med order by går det segt, kanske kör den order by på 130 000 * 6000 rader eller nåt skumt
(om du förstår den förklaringen )
Hm, jo. Nåt konstigt är det.

Jaja, men frågan är om det går att snabba upp den där frågan ytterligare. Det är nog svårt eftersom den är så pass enkel, det går inte göra så mycket enklare...
Anders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-05, 23:00 #17
void void är inte uppkopplad
Medlem
 
Reg.datum: Oct 2003
Inlägg: 124
void void är inte uppkopplad
Medlem
 
Reg.datum: Oct 2003
Inlägg: 124
Ok,

nu är jag ute på tunn is och snurrar som bambi. Men om de båda frågorna går mycket snabbare enskilt, varför inte försöka och ställa dem för sig själva då? Har ingen aning om koden nedanför funkar, vet bara att jag gjort nåt liknande tidigare. Först skapar du en temporär tabell med de tio senaste inloggade och sen kör du en select där du klumpar ihop dem med användarna.

CREATE TEMPORARY TABLE senaste SELECT *FROM inlogg ORDER BY id DESC LIMIT 10;
SELECT * FROM members INNER JOIN senaste ON members.id = senaste.id;

eller ja, sista borde väl kanske gå lika bra med
SELECT FROM members,senaste WHERE members.id=senaste.id.

Hum, jag svamlar nog bara nu
void är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-06, 01:03 #18
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Citat:
Originally posted by void@Dec 5 2003, 21:00
CREATE TEMPORARY TABLE senaste SELECT *FROM inlogg ORDER BY id DESC LIMIT 10;
SELECT * FROM members INNER JOIN senaste ON members.id = senaste.id;

eller ja, sista borde väl kanske gå lika bra med
SELECT FROM members,senaste WHERE members.id=senaste.id.

Hum, jag svamlar nog bara nu
Jag har aldrig använt mig av TEMPORARY TABLE, men alla sätt är ju bra utom de dåliga...

Men frågan kvarstår om det blir nåt snabbare totalt sett? Varje fråga i sig kanske blir snabbare, men du får ju en del arbete mellan dem då istället som tar tid...
Anders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-12-08, 15:12 #19
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
Ja med en temporär tabell borde det gå snabbare..smart lösning
Egentligen var min ursprungliga fundering varför inte mySQL hanterar denna typ av frågor bättre, jag menar att ta ut de senaste posterna i en tabell och sen göra en join mot en annan tabell..det är väldigt 'basic' ,inte direkt en komplex fråga och jag tycker det borde funka utan en massa 'workarounds'
danjel ä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 14:16.

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