Autor Zpráva
radecek
Profil
Ahoj,

mam optimalizovat databazi, ktera ma 100 000 radku abych zjistil kolik casu zabare sql dotaz.

Potreboval bych neco ve stylu. Vlozim nekde mysql dotaz: "SELECT * FROM tabulka" A program mi vrati prikaz se provedl za 30sekund :) Nejlepe by to bylo aby to komunikovalo primo s MySQL serverem bez zdrozovani na PHP.

Dekuji
tiso
Profil
radecek - sorry, ale pokiaľ toto nevieš, tak ako chceš optimalizovať tú databázu?
Joker
Profil
radecek
Však není problém si to naprogramovat:
Všechno si nastavíte, zjistíte čas, provedete dotaz (respektive třeba hodně dotazů v cyklu), zjistíte čas, vypíšete rozdíl časů.
Sice to bude v PHP, nicméně když těch dotazů uděláte hodně (třeba 5000, podle toho, jak dlouho to pak trvá), tak čas potřebný na to zjišťování času půjde zanedbat a komunikace PHP s databází... no vždycky se s databází musí nějak komunikovat, ne?

Anebo druhá možnost- vždyť samotný MySQL klient píše, jak dlouho dotaz trval... takže stačí tam jen napsat příkaz :) Nevýhoda je, že čas provedení jednoho příkazu může být dost závislý na situaci v počítači v danou chvíli... provést v PHP těch dotazů pár tisíc za sebou a zprůměrovat by bylo lepší.

Třetí možnost je použít MySQL příkaz BENCHMARK() ...nicméně ten má tu nevýhodu, že benchmarkovaný dotaz může vracet jen jeden sloupec a nejvýše jeden řádek, takže na SELECT * FROM tabulka můžete obvykle s klidem zapomenout.

Ovšem kdyby provedení jednoho dotazu trvalo 30 sekund, to by byla dost tragedie :)
radecek
Profil
Delal jsem to vzdycky pres phpmyadmina, ale vypis 80k radku je hodne. A navic jednou se provede za 1.5 sek a po druhe za 0.008sek takze asi pouziva nejaky cache.
radecek
Profil
Joker
Prave ta tabulka je v takovem stavu ze trva asi 30sekund jsou tam nezkutecne prasarny :) Uz jsem si naprogramoval php aplikaci ktara porovnana vice dorazu a prumetovala to, ale slapalo to pekne do nejakych 17k radku. Ted uz ne :)

Pri vkladani do konzole to mi jde, ale vypsat ten 80k radku ktere jsou v tabulce a vyplivne je dotaz je vypis na dlouho :) Tudis potrebuju ziskat jen ten cas ne obsah :)
Nox
Profil
tiso
co naděláš, nebojuj s větrnými mlýny;)

radecek
Cachování by mělo jít zrušit pro určitý příkaz, nějaký SQL_NO_CACHE, ale nevím přesně kam to, mrkni se na to
Jestli to ta aplikace používá takový dotaz, tak to asi hodně není...
A taky radši sloupce vyjmenovávat, než hvězdičku
Jinak viz Joker

Joker
Jj, co jsem nedávno testoval, tak jenom samotný připojení k databázi trvalo stejně dlouho, jako vše ostatní dohromady
(žádný sql dotaz, nějaké php, moc toho nebylo...asi 0.00004 versus 0.00008, ikdyž přesně už si těma nulama jistej nejsem)
Takže meření by opravdu mělo jít zanedbat....no a navíc - jde změřit pouze vše ostatní bez příkazů, udělat průměr,
někam ho uložit a pak ho odečítat...pořád tam bude nějaká ta php-mysql režije, ale ta bude vždy, takže je to skoro i v pořádku to měřit
radecek
Profil
Dobre zeptam se jeste jednou :)

Jak v konzoli vypsat pocet sekund provadeneho dotazu, bez vypsani obsahu.
radecek
Profil
Ha mam to..
SELECT SQL_CALC_FOUND_ROWS  
...  FROM ..
LIMIT 0
Kajman_
Profil *
Ještě mrkněte na explain, ten může být při optimalizaci dobrým vodítkem.
Toto téma je uzamčeno. Odpověď nelze zaslat.