Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by

[es] :: MySQL :: mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by

[ Pregleda: 3032 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Golja

Član broj: 92685
Poruke: 85
*.dynamic.isp.telekom.rs.



Profil

icon mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by07.04.2015. u 00:04 - pre 109 meseci
tabela ima oko 2 miliona redova, sve je ok kada se pretrazuje jedna rec..
ali ako se pretrazuju 2-3-4 reci onda postaje uzasno spor upit.. takodje ako se doda ORDER BY onda je jos sporiji, iako je sort po primary/index polju

fulltext(title,keywords)
primary index(record_num)


Code:
SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free') ORDER BY record_num DESC LIMIT 30

0.0040 seconds
-----------------------------------------------------------------------------------------------------------------------------------------------
Code:
SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free video') ORDER BY record_num DESC LIMIT 30

0.8115 seconds
-----------------------------------------------------------------------------------------------------------------------------------------------
Code:
SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free teen') ORDER BY record_num DESC LIMIT 30

3.7338 seconds
-----------------------------------------------------------------------------------------------------------------------------------------------
Code:
SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free teen young') ORDER BY record_num DESC LIMIT 30

4.6115 seconds


BEZ ORDER BY brze 4-5 puta, i nema "using filesort"
Code:
SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free teen young') LIMIT 30

0.5060 seconds


Code:
explain SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free teen young') ORDER BY record_num DESC LIMIT 30

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE content fulltext title_2 title_2 0 1 Using where; Using filesort

Code:
explain SELECT record_num FROM content WHERE MATCH (title,keywords) AGAINST ('free teen young') LIMIT 30

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE content fulltext title_2 title_2 0 1 Using where




svasta sam probao, skroz dropovao indexe, pa kreirao nove, check/optimize table, force index, "match in boolean mode" i slicno, ali nista ne pomaze, i vise izgubih zivce :)

da li neko zna da me uputi gde gresim ili sta bih jos mogao da probam ?


edit: mysql je 5.5.42, probano je jos na 2 razlicita servera sa 5.3 i mariadb5


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by07.04.2015. u 00:55 - pre 109 meseci
brze je bez order by zato sto za order by mora da pokupi sve rezultate, pa ih sortira i vrati prvih N, bez order by ti samo vrati prvih N koje nadje bez obzira na redosled .. ft index ne moze da se merge sa pk indexom tako da to sto orderujes po pk ne pomaze

realno FT u mysql-u je ... da se ne izrazavam ...

5.7 to radi dosta bolje (sa innodb fts radi bolje, myisam je isto sra123) tako da mozes da probas da uvuces tu tabelu na 5.7 pa da probas, moze da se desi da dobijes dosta bolje rezultate no i dalje to nece biti ni blizu dobro kao, recimo, sphinx ili lucene ili ...

resenje tvog problema - sphinx. on moze lepo da se uveze sa mysql-om i to super radi


 
Odgovor na temu

Golja

Član broj: 92685
Poruke: 85
*.dynamic.isp.telekom.rs.



Profil

icon Re: mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by07.04.2015. u 01:24 - pre 109 meseci
e fak onda, mislio sam da ima neka "fora" da se sredi nekako taj order by, jer relano to je lagan upit, nista komplikovano sa join group i slicno..
da je makar sort po datumu unosa to bi bilo ok, ali ne znam koji je ono redosled sto izlazi bez order by, nigde logike..


sphinx se i koristi za jedan deo "related" rezultata, radi fino.. ali kada se prebaci ceo search na sphinx nastaje neki cudan lag 4-5s, i zbog toga se ponovo pokusava sa mysql search, nesto nije kako treba ili sa php/apache ili je problem sto je sphinx i mysql na drugom serveru a ne na localhost.. mozda je i problem jer se onda dosta vise koriste upiti "select * from content where id='xx'" jer sphinx vraca samo ID pa treba pokupiti iz baze taj content..

ili jednostavno previse je to opterecenje pa treba prosiriti sa jos nekim serverom, uglavnom da znam da odustanem od mysql varijante i jos jednom pokusam sa sphinx

btw, i pored svega se koristi i memcache za sve mysql upiti, i opet sve je to nekako sporo
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by07.04.2015. u 01:35 - pre 109 meseci
Citat:
Golja: e fak onda, mislio sam da ima neka "fora" da se sredi nekako taj order by, jer relano to je lagan upit, nista komplikovano sa join group i slicno..
da je makar sort po datumu unosa to bi bilo ok, ali ne znam koji je ono redosled sto izlazi bez order by, nigde logike..


jedino da probas nekako da limitiras broj slogova kroz koje prolazi, da dodas u where nesto tipa "daj mi samo zadnjih mesec dana" (ako vec imas datum) i onda particionises po toj koloni iz where tako da dobijes manju particiju iz koje cupas fts ...

kao sto rekoh overi 5.7, ja iskreno nisam preterano upoznat sa tim kako fts uopste radi u mysql-u, nisam zagledao source ali znam da su ulozili bas puno energije i para u to da se tljne myisam a poslednja stvar koja je odrzavala myisam zivim je bio taj fts .. tako da su u innodb ubacili fts ... u startu je taj fts u ibd bio dosta sporiji od myisam ali onda je oracle tu doveo neke ludjake i to je ubrzano nekoliko puta .. opet - nisam probao licno ne trosim fts ali probaj mozda ti 5.7 resi problem, mozda ne ..

Citat:
Golja:
sphinx se i koristi za jedan deo "related" rezultata, radi fino.. ali kada se prebaci ceo search na sphinx nastaje neki cudan lag 4-5s, i zbog toga se ponovo pokusava sa mysql search,


nisam nikad cuo za to ali sam siguran da ako zakukas u sphinx community-u da ces dobiti brzo odgovor, sigurno je neka glupost u pitanju koja se lako resava

Citat:
Golja:
"select * from content where id='xx'" jer sphinx vraca samo ID pa treba pokupiti iz baze taj content..


pa vidi kad je id pk taj upit je uzasno brz ma kolika je tabela, pitanje samo koliko sphinx-u treba da odgovori

Citat:
Golja:
ili jednostavno previse je to opterecenje pa treba prosiriti sa jos nekim serverom, uglavnom da znam da odustanem od mysql varijante i jos jednom pokusam sa sphinx
btw, i pored svega se koristi i memcache za sve mysql upiti, i opet sve je to nekako sporo


nemam dovoljno podataka da bi mogao da ti kazem kako da ubrzas ceo sistem a i to malo prevazilazi ovaj forum, ali generalno sam FTS upit je takav kakav je .. da bi ga ubrzao
- probas 5.7
- budznes recnik reci koje neces da indexiras
- povecas velicinu min reci koju indexiras
- particionises tabelu na manje particije pa onda radis FTS samo iz jedne particije

takodje sa 5.7 obavezno instaliraj SYS bazu (novi 5.7 ce doci sa njom ali za sada jos uvek moras da je turis externo) i onda profajliraj mysql vidi gde ti odlazi ram, cpu ..
 
Odgovor na temu

[es] :: MySQL :: mysql fulltext 2 miliona redova, spor upit ako je vise reci, jos sporiji ako je order by

[ Pregleda: 3032 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.