Autor | Zpráva | ||
---|---|---|---|
wig Profil |
#1 · Zasláno: 23. 8. 2012, 17:06:53 · Upravil/a: Moderátor (editace znemožněna) 27. 8. 2012, 09:21:53
Prosim o radu co nechat naindexovat aby se nevytvarelo filesort
EXPLAIN SELECT firmy.titulek, firmy.id, firmy.popiscinnosti, firmy.seotitulek, firmy.adresa, firmy.mesto, firmy.logo FROM firmy, firmy_tagyh WHERE firmy.idcislo = firmy_tagyh.idcislofirmy AND firmy.schvaleni = '1' GROUP BY firmy.id ORDER BY firmy.top DESC , firmy.bodovani DESC LIMIT 0 , 25 1 SIMPLE firmy ref idcislo,schvaleni schvaleni 1 const 164933 Using where; Using temporary; Using filesort 1 SIMPLE firmy_tagyh ref idcislofirmy idcislofirmy 4 nazevdb.firmy.idcislo 2 Using index Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
ninja Profil |
#2 · Zasláno: 23. 8. 2012, 18:30:01
Zkuste přidat společný index přes 2 sloupce: firmy.top, firmy.bodovani
|
||
Kajman Profil |
#3 · Zasláno: 23. 8. 2012, 20:07:23
Pokud mají skoro všechny firmy nějaké tagy, můžete zkusit jeden index nad třemi sloupci (schvaleni, top, bodovani) a upravit dotaz na
SELECT firmy.titulek, firmy.id, firmy.popiscinnosti, firmy.seotitulek, firmy.adresa, firmy.mesto, firmy.logo FROM firmy WHERE firmy.schvaleni = '1' HAVING EXISTS (SELECT idcislofirmy FROM firmy_tagyh WHERE firmy_tagyh.idcislofirmy = firmy.idcislo) ORDER BY firmy.top DESC, firmy.bodovani DESC LIMIT 0, 25 Pokud jsou navíc skoro všechny firmy schválené, tak by mohl být jen index na (top, bodovani) a podmínku na schválení přesunout do having. |
||
Časová prodleva: 3 dny
|
|||
wig Profil |
#4 · Zasláno: 26. 8. 2012, 23:04:34
diky - výsleek je však bohužel stejný.
a k doplnění lze předpokládat, že jsou skoro všechny firmy schváleen a skoro všechny mají tagy |
||
Kajman Profil |
#5 · Zasláno: 27. 8. 2012, 09:19:54
wig:
Pomalu si přidávejte omezení - zkoušejte si ty dotazy a explainy postupně - kdy to ještě je svižné a kdy ne. (U zmíněných dotazů je vždy potřeba pro to rychlé řazení složený index nad sloupci (top, bodovani).) SELECT firmy.* FROM firmy ORDER BY firmy.top DESC, firmy.bodovani DESC LIMIT 0, 25 SELECT firmy.* FROM firmy HAVING firmy.schvaleni = '1' ORDER BY firmy.top DESC, firmy.bodovani DESC LIMIT 0, 25 SELECT firmy.* FROM firmy HAVING firmy.schvaleni = '1' AND EXISTS (SELECT idcislofirmy FROM firmy_tagyh WHERE firmy_tagyh.idcislofirmy = firmy.idcislo) ORDER BY firmy.top DESC, firmy.bodovani DESC LIMIT 0, 25 |
||
Časová prodleva: 12 let
|
0