Autor Zpráva
Gnd
Profil *
Zdravim,

poradi nekdo jak optimalizovat dotazy do dtb.. jde o nasledujici pripad.

Mam jednu tabulku kde je prevazna cast textovych veci.. resp. jde o tabulku, kde se ukladaji inzertni data, ma cca 30 sloupcu. Data prebiram od partnerskych webu, pred ulozenim kontroluji duplicitu pomoci LIKE v tilulku inzeratu a casti textu samotneho inzeratu, tzn. neco jako LIKE '%$nadpis%' OR LIKE '%$casttextu%'.

Bohuzel tohle pravdepodobne dosti zatezuje hostujicic server, alespon dle vyjadreni adminu. Udajne je vytezuji temito dotazy z 50%, proto me zajima, jak jinak kontrolovat duplicitu nez takhle. Nekde jsem cetl, ze LIKE je na vykonani mnohem narocnejsi nez kdyz se hledaji urcite hodnoty. Veskere dotazy mam opatreny LIMIT 1.

V tabulce je cca 350 tis radku a cca 120 MB dat.

Diky za rady a tipy...
Tomasds
Profil
Mohl bys sem dát ten dotaz celý? Nad kolika sloupci děláš ten LIKE? A na co tam máš těch 30 sloupců, má to opodstatnění?
Gnd
Profil *
Mohl bys sem dát ten dotaz celý? Nad kolika sloupci děláš ten LIKE? A na co tam máš těch 30 sloupců, má to opodstatnění?

ja nevim, zda vubec ctes to co jsem psal.. LIKE delam 2x tzn. 2 sloupce...

presne je tam 18 sloupcu, s 30-ti jsem to trochu prehnal a opodstatneni dle me maji, obsahuji jednotliva data inzeratu jako kategorizaci, kontakty, e-maily, url, IP, atd.... preci to nebudu davat do nove tabulky.
nightfish
Profil
na uvedené hledání se neuplatňuje žádný index (kvůli tomu procentítku na začátku), proto je to tak pomalé (na každý dotaz se prohledává celá tabulka)
bez znalosti formátu vstupních a ukládaných dat nelze navrhnout lepší techniku hlídání duplicit...
Tomasds
Profil
Gnd
Napsals "neco jako LIKE '%$nadpis%' OR LIKE '%$casttextu%'".

Připadá ti to jako jednoznačný popis toho, že LIKE máš použitý dvakrát? Mně ne. Vyjadřuj se přesně a nikdo se tě nebude muset ptát, aby se ujistil, že nejsi úplný amatér.

K věci. Ať je inzertní systém stavěný jak chce, skoro s jistotou má každý inzerát svoje ID. Pokud web umožňuje odpověď přes formulář, skoro určitě v inzerátu bude link, ve kterém bude ID figurovat. Když to ID z toho dokážeš vytáhnout, nebudeš muset kontrolovat text a místo dvou LIKE budeš mít jedno "=", navíc většinou s numerickými hodnotami.
Mastodont
Profil
Data prebiram od partnerskych webu
Tak je přebírej včetně zmíněného ID inzerátu a to si ukládej do extra sloupce. pak se hledání značně zjednoduší.
srigi
Profil
presne je tam 18 sloupcu, obsahuji jednotliva data inzeratu jako kategorizaci, kontakty, e-maily
TO vypada na zly navrh DB. Ten by sa oplatilo normalizovat.
bohyn
Profil
Gnd
Jak pise srigi, ta tabulka by se dala rozdelit do nekolik jinych. Na fulltext vyhledavani pouzivej fulltext vyhledavaci nastroje - jsou na to urceny. A samozrejme odpovidajici indexy.
Gnd
Profil *
Tak je přebírej včetně zmíněného ID inzerátu a to si ukládej do extra sloupce. pak se hledání značně zjednoduší.

Bohužel partnerské weby duplicitu nějak nehlídají... měl bych různá ID ale stejné inzeráty..
Gnd
Profil *
Jak pise srigi, ta tabulka by se dala rozdelit do nekolik jinych.

To je opravdu 18 sloupcu tolik?? Krome titulku a samotného inzerátu jde vetsinou o ciselne hodnoty nebo kratke retezce do 30 znaku.

Rozlozenim do nekolika tabulek bych musel vést složené dotazy, nebo by jich bylo více, čímž by narostl nárok na počty dotazů, které prakticky každý hosting omezuje.
Joker
Profil
Gnd
To je opravdu 18 sloupcu tolik?
18 sloupců je docela hodně. Ale jsou-li potřeba, tak to "tolik" není. Otázka je, jsou-li potřeba.
Kajman_
Profil *
Můžete si na sloupcích vytvořit nějaký hash, kterým odhalíte naprosto stejné inzeráty. Najítí indexovaného hashe bude rychlejší než like.
srigi
Profil
Gnd
To je opravdu 18 sloupcu tolik??

To zalezi ci sa ti v ramci tej tabulky vytvaraju duplicitne zaznamy - teda nemyslim tvoj prim. problem hore, ale jednoducho nacrtnute:
- nespravne
  kazdy ulozeny riadok bude obsahovat stlpec s menom webstranky odkial je inzerat stiahnuty
  hodnota v takomto stlpci bude napr. "www.example.com"
  nevyhoda - ak budes mat viac zaznamov z www.example.com, budu sa ti v ramci tohto stlpca mnozit duplicitne udaje

- spravne
  vytvoris novu tabulku nazvanu napr. 'zdroj'
  v tabulke s inzeratmi teraz nebudes ukladat nazov stranky, ale ID riadku z tabulky 'zdroj'


Akokolvek to moze pripadat ako kompilkacia, toto je zaklad optimalizacie. Preto sa tieto databazy volaju "Relacne", lebo v nich vytvarame relacie. Pri blbom plochom ukladani by predsa postacil obycajny subor.
ninja
Profil
Jak jiz pise Kajman_, pouzil bych nejake pregenerovane hashe pro filtraci.

Tak napriklad jestli je sloupec telefoni cislo, je mozne vyfiltrovat jen cisla a z nich vytvorit hash. Ten pak porovnate s hashem z aktualniho radku a najdete shodu. Predfiltrovanim jen cisel najdete duplicitu i u "Pepa 800123456 (volat vecer)" a "+800 123 456".

Email je jeste jednodussi.

Takto myslim pujde zpracovat vetsina sloupcu krom vlastniho titulku, popisu a podobnych. Ale i zde jde jiste omezit vyber treba na inzeraty ve stejne/podobne kategorii (auta, nemovitost, mobil, atd.).

Rekl bych se kontrolou kontaktnich udaju odhalite 80% duplicit. Ten zbytek asi nestoji za namahu vas ani serveru.
Gnd
Profil *
spravne
vytvoris novu tabulku nazvanu napr. 'zdroj'
v tabulke s inzeratmi teraz nebudes ukladat nazov stranky, ale ID riadku z tabulky 'zdroj'


to zni logicky... moc diky za radu..

jeste jedne dotaz, proc by nesel nasadit hash treba na titulek inzeratu..
Tomasds
Profil
proc by nesel nasadit hash treba na titulek inzeratu..
A proč by neměl jít? Jde jen o to, že duplicit titulků bude pravděpodobně víc než duplicit samotných inzerátů.

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: