|
SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
07. 11. 2011. | #1 |
član
Na probnom radu
Datum učlanjenja: 08.07.2008
Lokacija: Jagodina
Poruke: 42
Hvala: 0
4 "Hvala" u 4 poruka
|
uzasno spor obican select upit , tabela 1GB sa 700000 redova
vise ne znam sta da optimizujem kad obican select traje i vise od minut, server je sa 8gb ram, mysql 5.1.58
tabela ima 700000rows npr ovaj upit SELECT record_num,title FROM content ORDER BY record_num DESC LIMIT 668936,36 first time execution: 175sec!!! Showing rows 0 - 29 ( 36 total, Query took 175.9067 sec) second time is ok Showing rows 0 - 29 ( 36 total, Query took 0.0003 sec) svi ovi upiti se PRVI put uzasno sporo izvrsavaju, dok kad se refreshuju ili opet izvrsi ISTI upit onda sve bude normalno oko 1sec SELECT record_num,title FROM content ORDER BY record_num DESC LIMIT 587456,36 SELECT record_num,title FROM content ORDER BY record_num DESC LIMIT 452369,36 SELECT record_num,title FROM content ORDER BY record_num DESC LIMIT 698745,36 isto se desava sa fulltext pretragom, prvi put katastrofa, dok sledeci put bolje koristi se memcache na serveru, ali dzabe to kad se prvi put ceka ogromno vreme . svaka pomoc dobrodosla! znam za resenje WHERE record_num >698745 AND record_num <698835 ali to ne mogu da odradim jer ima "rupa" medju record_num, a i da to odradim za select ne bih mogao za fulltext search |
07. 11. 2011. | #2 |
profesionalac
Qualified
|
A WHERE record_num > 698745 LIMIT 36 ?
Uvek za taj broj uzmeš poslednji row iz prethodnog upita... Ili, da koristiš dodatnu tabelu, evo ti primer: http://stackoverflow.com/questions/1...e-limit-clause
__________________
www.salebab.net Poslednja izmena od salebab : 07. 11. 2011. u 22:15. |
07. 11. 2011. | #3 | |
član
Na probnom radu
Datum učlanjenja: 08.07.2008
Lokacija: Jagodina
Poruke: 42
Hvala: 0
4 "Hvala" u 4 poruka
|
moze i tako ali opet to samo malo skracuje vreme u zavisnosti gde je taj ID jel na pocetku ili pri kraju tabele
resio sam da cu ici ipak sa WHERE record_num >698745 AND record_num <698835 , pa neka bude poneka rupa, nema ih vise od 400-500, a to je zanemarljivo ali sad ostaje veci problem, sta sa fulltext pretragom? Citat:
|
|
07. 11. 2011. | #4 |
Super Moderator
Invented the damn thing
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
|
Index na record_num polju postoji?
Dalje, koliko se secam kad radis nesto ovako, MySQL "svlaci" prvih X slogova do setovanog offseta (prvi parametar u limitu) pa tek onda vrati slogove sa tog mesta. Pogledaj ovaj link, mozda iskopas nesto korisno: http://www.mysqlperformanceblog.com/...-optimization/ |
07. 11. 2011. | #5 |
Ivan Dilber
Sir Write-a-Lot
|
to ti je zbog ORDER BY, on mora uvek da prvo sortira svih 700K redova...
imas dva resenja, ili da smanjis broj redova kao sto kaze salebab, ili da optimizujes indexe na tabeli tako da se sortiranje radi na indexima direktno. Tu je takodje bitno i da mysql ima dovoljno memorije da mu ceo index stane u memoriju. dodaj EXPLAIN ispred upita pa vidi sta ce da ti kaze... i procitaj ovo EDIT: pretece me dinke EDIT2: Da ne pravim novu poruku, za FULLTEXT ti je isti problem, jer sam full text search je jako brz, ali verovatno interracial (hmm, cime se ti to bavis? ) vrati previse rezultata...
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 07. 11. 2011. u 22:31. |
07. 11. 2011. | #6 | |
član
Na probnom radu
Datum učlanjenja: 08.07.2008
Lokacija: Jagodina
Poruke: 42
Hvala: 0
4 "Hvala" u 4 poruka
|
orderby ne verujem da je problem, i bez njega je ista situacija
problem je kao sto kazete kada se koristi limit onda prodje kroz celu tabelu i uzme samo x zadnjih explain SELECT record_num,title FROM content ORDER BY record_num DESC LIMIT 718745,36 Kôd:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE content ALL NULL NULL NULL NULL 702900 Using filesort Kôd:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE content range PRIMARY PRIMARY 8 NULL 1 Using where recimo da je ovaj problem sa select resen na ovaj nacin, ostaje veci problem sa fulltext pretragom gde moram koristiti LIMIT ? Citat:
radim sa nekim adult spajderima, sve je bilo dobro dok poseta i baza nije bila velika, sad je problem to optimizovati, a klijent je spreman uzeti i poseban server za mysql ali opet mislim da ovo i nije nesto velika baza pa da ne moze izdrzati.. pogledacu ove linkove, ali mislim da sam ih vec sigurno prosao jer vec 2-3 dana samo to gledam |
|
07. 11. 2011. | #7 |
član
Na probnom radu
Datum učlanjenja: 08.07.2008
Lokacija: Jagodina
Poruke: 42
Hvala: 0
4 "Hvala" u 4 poruka
|
pogledao sam one linkove, ali to recimo da je reseno, dajte neku literaturu za
fulltext + big table + LIMIT + orderby , google mi nista korisno nije dao |
07. 11. 2011. | #8 |
profesionalac
Qualified
|
Mozes li da postavis Create Table da bi videli kako je kreirana tabela i indeksi?
|
07. 11. 2011. | #9 | |
član
Na probnom radu
Datum učlanjenja: 08.07.2008
Lokacija: Jagodina
Poruke: 42
Hvala: 0
4 "Hvala" u 4 poruka
|
testiram samo sa ovim jednim osnovnim poljem, tako da druga ne bi trebala ni da uticu ni na sta
Citat:
|
|
08. 11. 2011. | #10 |
Ivan Dilber
Sir Write-a-Lot
|
Koliko ja znam, boolean fulltext ne bi trebalo da automatski sortira rezultate po relevance, sto znaci da bi trebalo da radi jako brzo. Ja imam u jednoj firmi foto-arhivu sa 2M rekorda i to radi pristojno brzo...
znaci mora da bude problem ili sa necim drugim u upitu ili sa samom bazom (da je index prevelik, pa ne staje u memoriju) Najbolji izvor informacija ti je mysql dokumentacija i stackoverflow.com EDIT: Nama treba chat ovde, prebrzo idu odgovori EDIT 2: probaj da koristis ORDER BY score, pa vidi jel onda brze...
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 08. 11. 2011. u 00:11. |
|
|