[ morlic @ 29.08.2004. 10:21 ] @
Neko je pominjao upite koji izgledaju ovako:

SELECT TOP 10 id, Naziv, Adresa FROM Kontakt WHERE id < :lastid ORDER BY id DESC

ali sta ako se zeli sortiranje po nekoj od kolona, recimo po nazivu, onda ovo nema smisla?
[ mmix @ 29.08.2004. 13:29 ] @
Tačno, a pored toga ima još jednu manu, ovim sistemom možeš ići samo unapred i to za po jednu stranicu, pošto ti je potreban lastId trenutne stranice. Skok sa n-te na n+x (x є Z\{0,1}), stranicu nije moguć dierktno već samo iterativnim pozivanjem skripte počevši od 0-og indeksa. Jedini benefit koji imaš je što manje opterećuješ SQL server (i LAN ako je SQL remote), međutim tu ima i drugih, boljih načina za optimizaciju, kao što je keširanje...
[ morlic @ 29.08.2004. 23:39 ] @
Kesiranje na strani klijenta? Ali ako se zeli dvosmerno kretanje to moze dovesti do velikog opterecenja resursa kod veceg broja korisnika, a pogotovo ako su spremni da idu u dubinu po stranicama. Cini mi se da resenje ovog problema trenutno ne lezi u tehnici koliko u konceptu prikaza podataka korisniku, jer SQL Server nema podrsku za izbor tipa ROWS m TO n u odnosu na Oracle, InterBase ili MySQL. Do sada sam radio samo klasicne aplikacije (n-tier) kod kojih se broj korisnika da priblizno proceniti i odrediti prava strategija, medjutim web zahteva drugaciji pristup. Na netu sam nasao gomile razlicitih pristupa za resavanje ovog problema na SQL Server platformi ali me interesuju jos neka iskustva.
[ BlueSoniq @ 01.09.2004. 15:53 ] @
jedno od resenja je da se napravi upit select pa unutar njega jos jedan

select


"SELECT * FROM " +


"(SELECT TOP {0} * FROM " +


"(SELECT TOP {1} * FROM ({2}) AS s0 ORDER BY {3}) AS s1 " +


"ORDER BY {4}) AS s2 " +


"ORDER BY {3}";




[ morlic @ 01.09.2004. 23:03 ] @
Mislim da je tu jedan select viska (koliko sam razumeo), dovoljno je i:

SELECT * FROM

(SELECT TOP 10 * FROM IMENIK AS s0
WHERE kontakt_id > :next_id
ORDER BY kontakt_id
) AS s1

ORDER BY ime

Ovako se dobija sortiranje po imenu ali samo u okviru grupe dobijenih slogova na jednoj stranici.
[ jablan @ 02.09.2004. 07:56 ] @
Citat:
morlic: Na netu sam nasao gomile razlicitih pristupa za resavanje ovog problema na SQL Server platformi ali me interesuju jos neka iskustva.

Možeš i da prvo u jednu temp tabelu ubaciš ključeve iz dotične tabele u redosledu koji ti je potreban, uz jedno autoincrement polje.

Posle džoinuješ sa tom temp tabelom a u where jednostavno kažeš between po tom autoincrement polju i uzmeš opseg slogova koji ti treba.
[ m1k4 @ 02.09.2004. 14:22 ] @
Ja koristim u ASP.NET session, u njega smestim celokupan select* query pa onda sa njim baratam. U session drzim Array(,). Da li ovo mnogo degradira performanse, ovaj nacin koristim kako ne bih za svaku stranu otvarao novu konekciju sa serverom.
[ jablan @ 02.09.2004. 14:38 ] @
Citat:
m1k4: Ja koristim u ASP.NET session, u njega smestim celokupan select* query pa onda sa njim baratam. U session drzim Array(,). Da li ovo mnogo degradira performanse, ovaj nacin koristim kako ne bih za svaku stranu otvarao novu konekciju sa serverom.

Udri calc.exe, pomnoži veličinu dobijenog dataseta sa brojem aktivnih korisnika pa ćeš videti koliko degradira performanse.

BTW, što moraš da otvaraš novu konekciju za svaku stranu?
[ bokac @ 02.09.2004. 14:41 ] @
Pa ne znam sta da ti kazem m1k4, zavisi sta radis na taj nacin. Ako radis sa manjim porcijama podataka onda je ok, ali ako radis sa vecim hmm... tesko da ce da valja.