Autor Zpráva
mimochodec
Profil
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
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
ShiraNai7:
A po čem mám koukat?
ShiraNai7
Profil
Po sloupci "Extra" .. hodnoty jako "Using temporary; Using filesort".
mimochodec
Profil
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
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
Tori:
Díky za inspiraci. Ten dotaz jsem nepoužil, ale ten poddotaz byl dobrý nápad.
Tori
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0