[MySQL] Sortiranje tablice

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori
Avatar
pootzko
Postovi: 816
Pridružen/a: 13 lis 2008, 21:15
Spol: M
OS: Arch GNU/Linux + KDE
Lokacija: Nerdvana
Kontakt:

[MySQL] Sortiranje tablice

Post Postao/la pootzko »

Ima li koji SQL guru ovdje? Imam nekakve rezultate koji izgledaju otprilike ovako:

Kod: Označi sve

apoljon             30.869	
pootzko	         50.829	
refreshko          51.946	
wh00p              47.572	
pangalaktik      64.939
acidnull             36.196	
beaer               60.008	
cookiesheep     44.439	
EveningFalls     59.189	
g3n0ming	        57.394	
SQL ne znam skoro ništa osim zbilja trivijalnih stvari. Ono što mi treba je da bih volio sortirati ove rezultate u tablici tako da kada korisnik učita stranicu može dobiti izlistanje top 50 usera sa njihovim score-ovima maltene odmah (da ne mora se queryjat ORDER BY, već da stvari već budu sortirane (indexirane?) u tablici prije nego što korisnik dođe, i kada se pojavi samo da se napravi query - SELECT prvih 50 usera po kriteriju najvišeg scorea). Ne znam ni šta da guglam konkretno za ovo, što mi treba? Čini mi se da mi treba indeksiranje, ali nisam siguran. Isto tako, volio bih da kada dođe neki novi korisnik i kada se izračuna njegov score da ga se odmah ubaci unutra u rang listu na pravo mjesto gdje i treba biti, tako da tablica ostane sortirana. U biti nisam siguran da li se indexiranje obavlja po nekom kriteriju (sortiranim vrijednostima stupca recimo) ili se jednostavno tablicu indexira po jednom ili više stupaca i da SELECT queryji kasnije automatski budu brži? Može neki hint što da guglam? Thnx.
...I put on my robe and a wizard hat...
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [MySQL] Sortiranje tablice

Post Postao/la augur »

Indeksiranje MySQL baze znači da se specificirani dio podataka seli u RAM za brži pristup. Znači da ćeš i dalje trebati "ORDER BY" u svojim uptima. Indeksira se zbog brzine izvršavanja upita i to je ono što će ti trebati. Obično se indeksira samo one stupce koji će biti bio WHERE conditiona i JOIN-ova. Ostalo (i primary keyeve) ne treba indeksirati. Dokumentacija ovdje pomaže: http://dev.mysql.com/doc/refman/5.0/en/ ... index.html. Primjeti da indeksirati nije potrebno ako to performanse ne zahtijevaju - znači da sve ovisi o tome koliko se puta pristupa tim podacima, kolike su performanse stroja na kojemu se to izvršava etc.

Na kraju odgovor na tvoja pitanja: "ORDER BY" ti treba, indeksiranje ti treba ako podataka ima puno i često im se pristupa. Također i kad se inserta novi score usera, ORDER BY će napraviti ono što želiš. Ne bih ti preporučio da radiš dodatnu tabelu sa već sortiranim podacima, jer ćeš i ovako dobit dobre performanse, a updejtati stalno dodatnu tabelu je pain in the ass (govorim iz iskustva :)).
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Avatar
pootzko
Postovi: 816
Pridružen/a: 13 lis 2008, 21:15
Spol: M
OS: Arch GNU/Linux + KDE
Lokacija: Nerdvana
Kontakt:

Re: [MySQL] Sortiranje tablice

Post Postao/la pootzko »

Ok, ali da li je moguće da "permanentno" zasortiram tablicu prema kriteriju najvećeg scorea? Taj dio mi još nije jasan, da li će se za svakog posjetitelja odrađivati ORDER BY na tablici sa nesortiranim vrijednostima ili je moguće izsortirati tablicu i da ostane sortirana (razmišljam u pravcu imaš 10000 random brojeva u txt fileu i zasortiraš ih i sejvaš file sa sortiranim vrijednostima i onda to tako fino ostane sortirano), a kasnije ubacivati samo nove scoreove tamo gdje im je i mjesto?

PS - što bi ti podrazumjevao pod puno podataka? Koliko row-ova bi bilo dovoljno puno da bi se isplatilo indexirati?

Thnx
...I put on my robe and a wizard hat...
Avatar
jjj
Postovi: 1451
Pridružen/a: 04 lip 2009, 00:46
OS: Nepu Yvahk
Lokacija: Classyfied

Re: [MySQL] Sortiranje tablice

Post Postao/la jjj »

pootzko je napisao/la:Ok, ali da li je moguće da "permanentno" zasortiram tablicu prema kriteriju najvećeg scorea? Taj dio mi još nije jasan, da li će se za svakog posjetitelja odrađivati ORDER BY na tablici sa nesortiranim vrijednostima ili je moguće izsortirati tablicu i da ostane sortirana (razmišljam u pravcu imaš 10000 random brojeva u txt fileu i zasortiraš ih i sejvaš file sa sortiranim vrijednostima i onda to tako fino ostane sortirano), a kasnije ubacivati samo nove scoreove tamo gdje im je i mjesto?
Za svakog posjetitelja koji zatraži funkcionalnost koja pokreće taj query, svaki put će biti izvršen. Možeš napraviti novu tablicu sa sortiranim vrijednostima, ali to obećaje biti PITA ako ju budeš morao updejtati.
csx

Re: [MySQL] Sortiranje tablice

Post Postao/la csx »

A da napraviš jedan view sa order by pa kad korisnik dođe radi samo select toga?

Kod: Označi sve

CREATE VIEW toplista AS SELECT korisnik, score FROM tablica ORDER BY score DESC LIMIT 50
i za korisnika

Kod: Označi sve

SELECT * FROM toplista
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [MySQL] Sortiranje tablice

Post Postao/la augur »

pootzko je napisao/la:Ok, ali da li je moguće da "permanentno" zasortiram tablicu prema kriteriju najvećeg scorea?
To nije najbolji pristup. Jedan od razloga je da ćeš možda u budućnosti trebati promijeniti kriterij sortiranja iz nekog razloga.
pootzko je napisao/la: Taj dio mi još nije jasan, da li će se za svakog posjetitelja odrađivati ORDER BY
Da, to je uobičajena praksa. U bazu podataka trpaš podatke kak ti se sviđa, a onda sa upitima formiraš rezultate kak ti se dopada. Taj pristup je u prednosti zbog fleksibilnosti. Možeš dodati nove kolumne podataka i kasnije sortirati na kompleksnije načine (recimo po dobi, po skoru i po abecedi). Ako imaš već jednu presortiranu tabelu za to, onda je ovo drugo nemoguće.
pootzko je napisao/la:na tablici sa nesortiranim vrijednostima ili je moguće izsortirati tablicu i da ostane sortirana
Konkretno koliko znam, MySQL ne podržava takve tablice. Ono kaj podržava više manje su neki defaulti (npr. defaultno sortiranje po primary keyu ascening), premda to možda ovisi i o enginu koji koristiš za bazu.
pootzko je napisao/la: PS - što bi ti podrazumjevao pod puno podataka? Koliko row-ova bi bilo dovoljno puno da bi se isplatilo indexirati?
Thnx
Ovisi o broju upita. Ako imaš cca 10.000 redaka zapisa koji moraš prikazati recimo svake sekunde (a podaci u tabeli se mijenjaju) onda bi bilo zgodno indeksirati. Osobno indeksiram čak i ako ima malo podataka (manje od 1000 redaka), i ako mislim da će količina podataka narasti.
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Netko
Postovi: 290
Pridružen/a: 13 ožu 2012, 20:14

Re: [MySQL] Sortiranje tablice

Post Postao/la Netko »

Ako te preformanse brinu sto se tice toga da mysql mora za svakog posjetioca radit "order by", mysql ima query cache i nemoras se brinut zbog preformansi ;)
Avatar
pootzko
Postovi: 816
Pridružen/a: 13 lis 2008, 21:15
Spol: M
OS: Arch GNU/Linux + KDE
Lokacija: Nerdvana
Kontakt:

Re: [MySQL] Sortiranje tablice

Post Postao/la pootzko »

hvala svima. u biti kontam da sam bespotrebno zakomplicirao jer u početku ne očekujem u biti nikakvu veliku posjećenost, ali budući da se radi o malom projektu na kojemu vježbam, neke si stvari zakompliciravam čisto eto tako, da bi znao za kasnije =)

za sada ću ostaviti najobičniji ORDER BY, a kasnije ako nekim čudom bude bilo potrebno lako ću dodati indeksiranje.

thnx još jednom
...I put on my robe and a wizard hat...
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [MySQL] Sortiranje tablice

Post Postao/la kepica »

u pravilu se o optimizaciji razmišlja samo u vremenski kritičnim dijelovima aplikacije ( igrice ).
prikaz HI-score je najmanje vremenski kritičan dio aplikacije ( igrice ) i tu ti nikakva optimizacija ne treba.
ako radiš real-time igricu gdje treba ZAISTA brzi odziv u igrici, onda si u problemu.
ali to opet zavisi na kojoj si platformi - web ili single-user.

što me dovodi do novog pitanja,
ima li ovdje programera koji rade profi igre ?
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Odgovori