Autor | Zpráva | ||
---|---|---|---|
mimochodec Profil |
#1 · Zasláno: 30. 4. 2012, 13:59:26
Tento dotaz se generuje 130 sekund. poradí někdo, čím to?
inzeraty - 35.000 řádků inz_kontakty - 5.000 řádků inz_kontakty_vazby - 25.000 řádků SELECT inzeraty.ID AS kID FROM inzeraty LEFT JOIN inz_kontakty_vazby ON inz_kontakty_vazby.IDinzeratu = inzeraty.ID LEFT JOIN inz_kontakty ON inz_kontakty.ID = inz_kontakty_vazby.IDkontaktu GROUP BY inzeraty.ID ORDER BY inzeraty.ID DESC LIMIT 0,10 |
||
ShiraNai7 Profil |
#2 · Zasláno: 30. 4. 2012, 14:00:51
spust dotaz s EXPLAIN na zacatku..
EXPLAIN SELECT inzeraty.ID AS kID FROM inzeraty LEFT JOIN inz_kontakty_vazby ON inz_kontakty_vazby.IDinzeratu = inzeraty.ID LEFT JOIN inz_kontakty ON inz_kontakty.ID = inz_kontakty_vazby.IDkontaktu GROUP BY inzeraty.ID ORDER BY inzeraty.ID DESC LIMIT 0,10 Pak bys mel vedet co se deje. |
||
mimochodec Profil |
#3 · Zasláno: 30. 4. 2012, 14:19:34
ShiraNai7:
A po čem mám koukat? |
||
ShiraNai7 Profil |
#4 · Zasláno: 30. 4. 2012, 14:20:45
Po sloupci "Extra" .. hodnoty jako "Using temporary; Using filesort".
|
||
mimochodec Profil |
#5 · Zasláno: 30. 4. 2012, 14:35:31
ShiraNai7:
Mám tam u té hlavní tabulky: Using where; Using temporary; Using filesort, u těch dvou joinovaných Using index. Chápu, co to znamená, ale pořád nevím, co z toho vyplývá. |
||
Tori Profil |
mimochodec:
„A po čem mám koukat?“ A taky na využití indexů (sloupce „possible keys“, „key“), viz manuál. Nejsem si jistá, jestli by to zrychlilo, ale zkuste toto: SELECT inzeraty.ID AS kID FROM inzeraty LEFT JOIN (inz_kontakty_vazby INNER JOIN inz_kontakty ON inz_kontakty.ID = inz_kontakty_vazby.IDkontaktu) ON inz_kontakty_vazby.IDinzeratu = inzeraty.ID GROUP BY inzeraty.ID ORDER BY inzeraty.ID DESC LIMIT 0,10 Ještě dotaz: Opravdu vybíráte jen sloupec ID, nebo více různých? Anebo líp se zeptám: co přesně chcete vybrat? Nešlo by poddotazem vybrat prvních deset ID z tabulky inzerátů a ostatní tabulky připojovat k těmto deseti řádkům (místo 35k)? |
||
Again Profil |
#7 · Zasláno: 30. 4. 2012, 16:31:14
Dobrý článek na tohle téma: http://php.vrana.cz/ukazka-pouziti-indexu.php. EXPLAIN ti v podstatě zjistí informace o tom, co všechno musí MySQL udělat při zadaní dotazu. Na základě těchto dat je jednodušší tabulku optimalizovat. Nejprve si tedy zjisti, co znamenají jednotlivé sloupce (select_type, table, type etc.) a poté přidej např: vhodné indexy nebo uprav dotaz do DB. Nejdůležitější je zjistit, proč vlastně trvá dotaz do databáze takovou dobu ...
|
||
mimochodec Profil |
#8 · Zasláno: 2. 5. 2012, 11:29:59
Tori:
Díky za inspiraci. Ten dotaz jsem nepoužil, ale ten poddotaz byl dobrý nápad. |
||
Tori Profil |
#9 · Zasláno: 2. 5. 2012, 13:08:19
mimochodec:
N.z. :) Až teď mi došlo, že jsem (tou změnou joinů) radila zbytečnost, keďže ty obě připojované tabulky se už předtím řešily jen přes index. |
||
Časová prodleva: 12 let
|
0