nekonezinu Posted May 29, 2008 Report Share Posted May 29, 2008 Sveiki! Problēma ir tāda ka datubāzē ir ~100 000 ierakstu un pie meklēšanas notiek atrasto ierakstu skaitīšana, kas aizņem sākot no dažām sekundēm līdz pāris minutēm(kas notiek gandrīz visu laiku), ir taisīti indexi visi trīs bet ātrums uzlabojas minimāli, gandrīz neuzlabojas. Kverija kuru izmantoju skaitīšanai ir : SELECT COUNT(*) FROM linki WHERE MATCH (title) AGAINST ('+"$s"'in boolean mode) - šī kvērija tikai dažos gadījumos skaita, citos neskaita un atgriež ka rezulātu nav, kaut arī ir SELECT COUNT(*) FROM linki WHERE title LIKE '%$s%' - ši skaita ļoti lēni Varbūt varat man palīdzēt? Link to comment Share on other sites More sharing options...
777 Posted May 29, 2008 Report Share Posted May 29, 2008 (edited) sorry laikam nepareizi izlasiju .... Edited May 29, 2008 by 777 Link to comment Share on other sites More sharing options...
bubu Posted May 29, 2008 Report Share Posted May 29, 2008 777: kāds tavis teiktajam ir sakars ar autora problēmu? nekonezinu: pirmajam variantam FULLTEXT indekss bija uzlikts? Un noņem nost to "in boolean mode", lai meklētu precīzu frāzi. Link to comment Share on other sites More sharing options...
marrtins Posted May 30, 2008 Report Share Posted May 30, 2008 Otram variantam nekādi indexi napalīdzēs. Vienā projektiņā laika gaitā uzradās šāda pati problēma - jo vierāk meklējamo ierakstu, jo meklēšana pēc '%frāze%' totāli iebremzē . Es to atrisināju šādi: Ieviesu trīs tabulas: urls - interesējošā resursa visi linki (ziņas, forums, ...) words - visu url unikālie vārdi words2urls - samapot vārdus ar urliem Reizi stundā fōnā iet crawleris, kas pievieno jaunos urlus (ko un kā pievienot definē ar klasi). Meklēšana notiek pēc unikāla indexa (vārdu tabulā) un pēc primary url tabulā, attiecīgi - ātrums faktiski nemainās no datu apjoma. Statistikai: Vienā db ir kā reiz biki virs 100`000 url, 245`000 vārdi, un 2.5miljoni saites starp vārdiem un url. Kāpēc ne FULLTEXT? Ja es pareizi atminos, tad FULLTEXT index nevarēja meklēt pēc vārda daļas? Augstāk minētajam variantam relatīvi vienkārši var pievienot fīču meklēt pēc vārda daļas vai locījumos <- turpmākais darbs pie šī meklētāja. Link to comment Share on other sites More sharing options...
nekonezinu Posted May 30, 2008 Author Report Share Posted May 30, 2008 Tas nozimē, ka man taisīt tabulu priekš title kurā būs divas kolonnas title|id un title bus primary index? bet id lai pec tam varetu dabūt url!? Link to comment Share on other sites More sharing options...
marrtins Posted May 30, 2008 Report Share Posted May 30, 2008 Nē, Tev jāsadala title pa vārdiem un jāliek tabulā `words` (nosaukums, protams, pēc izvēles) kā word_id|word, kur `word_id` ir primary key, un `word` ir unikāls. Otrā tabulā (`words2title`) title_id|word_id, kur title_id ir primary key no tabulas `linki` (Tavā gadījumā) un word_id ir primary key no tabulas `words`. Pēc tam selekts no words tabulas pēc interesējošā atslēgvārda un joins ar words2title tabulu. Es taisīju, lai der jebkādam resursam (url), bet var, protams, taisīt arī kontrētai tabulai (`linki`). Link to comment Share on other sites More sharing options...
nekonezinu Posted May 30, 2008 Author Report Share Posted May 30, 2008 bet to nevar ielikt vienaa tabulaa? word_id|word|link_id ? primary word? Link to comment Share on other sites More sharing options...
marrtins Posted May 30, 2008 Report Share Posted May 30, 2008 nea, jo word var atkārtoties vairākos ierakstos. Link to comment Share on other sites More sharing options...
nekonezinu Posted May 30, 2008 Author Report Share Posted May 30, 2008 id | link | title 1 | http://planes | very big planes 2 | http://bikes | small bikes 3 | http://flowers | all about garden word_id|word 1 | cars 2 | bikes 3 | planes 4 | ships 5 | boats title_id | word_id 2 | 2 1 | 3 taaa? Link to comment Share on other sites More sharing options...
marrtins Posted May 30, 2008 Report Share Posted May 30, 2008 nuja :) Link to comment Share on other sites More sharing options...
nekonezinu Posted May 30, 2008 Author Report Share Posted May 30, 2008 Man tā šķiet , ka man nevajag pēdējo tabulu, lai saskaitītu rezultātus, jo pietiks tagad ar SELECT COUNT(*) FROM words WHERE word = '$s' ?? Link to comment Share on other sites More sharing options...
marrtins Posted May 30, 2008 Report Share Posted May 30, 2008 nē, tad sanāks, viens ieraksts. words tabulā word ir unikāls==viens ieraksts. Link to comment Share on other sites More sharing options...
nekonezinu Posted May 30, 2008 Author Report Share Posted May 30, 2008 Es domāju, ka nesanāks 1 ieraksts, jo ir daudz linku, un vārdi noteikti atkārtosies!? Link to comment Share on other sites More sharing options...
marrtins Posted May 31, 2008 Report Share Posted May 31, 2008 Es domāju, ka nesanāks 1 ieraksts, jo ir daudz linku, un vārdi noteikti atkārtosies!? Saproti - nav tolks atkārtot vārdus, priekš tam ir starptabula, kas saivieno titli un vārdu. Vienā tabulā linki (ar titlēm), otrā vārdi (unikāli), trešā (starptabula) title_id un vārda_id. Trešajā tabulā var ieviest vārdu skaitu - t.i. cik reizes vārds atkārtojas titlē. Link to comment Share on other sites More sharing options...
nekonezinu Posted May 31, 2008 Author Report Share Posted May 31, 2008 Viens vārds viena linka titlē neatkārtosies, bet citās titlēs tāds vārds arī būs.. Link to comment Share on other sites More sharing options...
Recommended Posts