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 |
#2 · Zasláno: 27. 12. 2014, 13:24:25
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 |
#5 · Zasláno: 27. 12. 2014, 14:18:57
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 |
#8 · Zasláno: 27. 12. 2014, 17:57:06
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 |
#9 · Zasláno: 27. 12. 2014, 18:07:28
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 |
#10 · Zasláno: 27. 12. 2014, 18:13:44
Taps:
Tak jsem to zvládla :) |
||
Časová prodleva: 9 let
|
0