Autor Zpráva
PetraPP
Profil
Ahojte,
potřebovala bych poradit se zrychlením zpracování mySQL dotazu .... pokud toto lze zrychlit. Jde hlavně o to, že v tabulce tags mám cca 18000 záznamů (slov) kterých se týká tento mysql dotaz:

$tagovaci_veta = "zboží, hračky, silvestr, vánoce, velikonoce, dřevo, železo";
$tagovani = explode("|", $tagovaci_veta);
foreach ($tagovani as $tag_data)
{
if ($tag_data != "")
{
$klicove_slovo = sql("SELECT id FROM tags WHERE (nazev LIKE '$slovo' OR search LIKE '$slovo') ORDER BY pocet_search DESC");
$stav_zapisu = sql("SELECT id_tags FROM tags_search WHERE id_sleva='$data[0]' AND id_tags='$klicove_slovo[0]'");
// pokud tág není zapsán, zapíšeme ho
if ($stav_zapisu[0] == "" AND $klicove_slovo[0] != "")
{
// insert into
}
}
}
Taps
Profil
PetraPP:
základem by mohlo být správné použití indexů, viz např. http://php.vrana.cz/ukazka-pouziti-indexu.php
PetraPP
Profil
Tak to bych měla mít správně:

TAGS: 18000 řádků
---------------------------
id int(11) unsigned Auto Increment
nazev varchar(150)
search varchar(150)
pocet_search tinyint(5) unsigned
seo varchar(150)

INDEXY: PRIMARY id


TAGS_SEARCH: 337000 řádků
----------------------------------------
id_sleva int(11) unsigned
id_tags int(11) unsigned
kategorie int(11) unsigned
podkategorie int(11) unsigned
podpodkategorie int(11) unsigned
time int(11) unsigned
lionel messi
Profil
PetraPP:
Tak to bych měla mít správně:
Nie som žiadny veľký odborník na použitie databázových indexov, ale toto sa na správne použitie indexov veľmi nepodobá. Odkážem pre zmenu iný článok Jakuba Vránu Jak psát kód: Databázové indexy vytvářejte při psaní dotazů, z ktorého jasne vyplýva, že tabuľka tags_search by mala mať index (id_sleva, id_tags).

Čo sa týka tabuľky tags, tam by som možno volil dva indexy: (nazev, pocet_search) a (search, pocet_search).

Možno by taktiež pomohlo pozrieť sa na predmetné SELECTy pomocou EXPLAIN. Pri tejto veľkosti tabuliek netreba brať používanie indexov na ľahkú váhu.
Taps
Profil
PetraPP:
Máš pouze vytvořen pouze index nad id, což je nedostačující
PetraPP
Profil
Tak jsem vytvořila:



U odpovědiČo sa týka tabuľky tags, tam by som možno volil dva indexy: (nazev, pocet_search) a (search, pocet_search).“ nevím, jak bych toto mohla vytvořit.
Alphard
Profil
PetraPP [#6]:
Takže vznikl index, který by tomu měl pomoci, zrychlilo se to?
Dále podotýkám, že index na 2 sloupce není totéž co 2 samostatné indexy, tj. lze to ještě zlepšit.

Ale na druhou stranu, 18k záznamů není zas tolik, aby se to se základními indexy neprovedlo docela rychle. Co přesně vstupuje do těch like porovnání, nejsou tam zleva %? Tj. spíš bych se bál toho prvního dotazu na tabulku tags, než toho druhého.

A obecně, neberte to špatně, ale správné použití indexů je už pokročilejší věc, doporučuji něco si o tom přečíst.
PetraPP
Profil
Mám zpracovat 9967 záznamů, což dle scriptu bude trvat až do 18:48h, což je 50 minut na zpracování 9967 záznamů. nějaký posun tam určitě je.
Taps
Profil
PetraPP:
nevím, jak bych toto mohla vytvořit
V admineru není problém vytvořit takový index, návod viz níže
1) klikneš na pozměnit indexy
2) Typ indexu - index
Sloupec (délka) vybereš z roletky nazev. Po výběru se hned vedle zobrazí další roletka tak z ní vybereš pocet_search
PetraPP
Profil
Taps:
Tak jsem to zvládla :)

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: