[ powersz @ 03.06.2015. 15:08 ] @
Zdravo, imam tabelu sa oko 800 000 redova. Imam polje opis-TEXT.
Za pretrazivanje koristim ovakav upit:
"SELECT * FROM tabela WHERE opis LIKE '%termin za pretragu%'"

Pretraga ovako traje traje 4-5 sec, da li postoji nacin da se to ubrza?
[ bogdan.kecman @ 03.06.2015. 15:11 ] @
like "%..." ne moze nikako da koristi index dakle pretraga je tako sto krene da cita tabelu od pocetka do kraja i radi match na red ..

da ubrzas
- redizajniraj aplikaciju
- dodaj FTS na to polje i koristi FTS (match against) umesto LIKE
- dodaj dodatne filtere
[ powersz @ 03.06.2015. 16:36 ] @
Nisam uspeo da dodam FTS, pretpostavljam da ne moze za innodb(promenio sam u innodb jer mi je tako mnogo brze iscitavalo podatke)

Razmisljam da dodam jos jednu kolonu i da tu ubacim naslov i prvih 160 karaktera iz teksta i da se ta kolona koristi za pretragu.
E sad, zanima me kog tipa bi trebalo da bude ta kolona?

I sta se desava ako trazim match against ('miš') a u polju pise mis?
[ bogdan.kecman @ 03.06.2015. 16:42 ] @
moze innodb ali moras da uradis upgrade na 5.6

mis vs mis se hendla kolacijama, zavisi koju kolaciju stavis to ce se
ili nece pogoditi

kao sto rekoh, ne mora FTS, mozes da redizajniras aplikaciju tako da
interno indexiras ta polja, sve zavisi sta radis i kakve pretrage pravis
[ powersz @ 05.06.2015. 09:48 ] @
Imam jos jedno pitanje. Nasao sam da full text index dodajem na sledeci nacin
ALTER TABLE tabela ADD FULLTEXT (polje);
E sad zanima me da li to moram da radim na primer jednom dnevno ako se baza cesto menja?
[ nkrgovic @ 05.06.2015. 10:07 ] @
Nope, to je klasican index nad bazom - jednom definisam storage engine ce ga odrzavati sam. Ne trebas nikad da re-indexiras.
[ powersz @ 05.06.2015. 13:44 ] @
Hvala ja planiram da pretrazujem vise kolona, npr da mi query bude match('naslov','opis','kategorija','podkategorija') against ....

Pretpostavljam da treba da uradim index ovako:

ALTER TABLE tabela ADD FULLTEXT (naslov, opis, kategorija, podkategorija);


Jos nesto me zanima, da li je moguce da se iskombinuje ovako nesto:
WHERE match() against() AND catid='12'
[ bogdan.kecman @ 05.06.2015. 13:56 ] @
da li si mozda pogledao mysql manual za fulltext ?
[ nkrgovic @ 05.06.2015. 14:27 ] @
Citat:
powersz:
Hvala ja planiram da pretrazujem vise kolona, npr da mi query bude match('naslov','opis','kategorija','podkategorija') against ....

Pretpostavljam da treba da uradim index ovako:

ALTER TABLE tabela ADD FULLTEXT (naslov, opis, kategorija, podkategorija);


Jos nesto me zanima, da li je moguce da se iskombinuje ovako nesto:
WHERE match() against() AND catid='12'

Je'l treba samo da radi, ili treba i da koristi index? :) Koliko redova ces imati u tabeli?

Lepo kaze Bogdan, ajde procitaj lepo manual?