Tema: mySQL view
Pogledajte određenu poruku
Staro 12. 06. 2008.   #19
cvele
Banned
Knowledge base
 
Avatar cvele
 
Datum učlanjenja: 01.07.2005
Poruke: 1.598
Hvala: 206
140 "Hvala" u 89 poruka
cvele ima spektakularnu aurucvele ima spektakularnu auru
Default

Citat:
Originalno napisao DejanVesic Pogledajte poruku
Četvrto, kada god možete, koristite bind varijable za definisanje kriterijuma za izdvajanje podataka; znači, umesto da lepite eksplicitne vrednosti u SQL uplit:

"Select * From Products_V where IDProduct = 23"

koristite:

"Select * From Products_V where IDProduct = :1"

a zatim i odgovarajući način za jezik / platformu da date vrednost parametru :1

Peto ... ma ima svašta, ne mogu sada da se setim
Delimicno tacno.
Masa ljudi kada procita ovakav savet gura bindove gde treba i gde netreba.

Bindovi se koriste kako bi se smanjilo vreme parsiranja istih upita, pomocu kesiranja.

Primer: rekurzivna funkcija koja u nekoj while petlji vadi decu iz tabele izvrsavajuci n puta isti upit sa promenjenim parametrom. U ovom slucaju koriscenje binda je vise nego validno, zato sto se lako moze desiti da vreme parsiranja svih ti silnih (istih) upita bude vece od vremena izvrsavanja upita (posebno ako imamo paralelne zahteve).

Bindove nije pozeljno koristiti u nekoliko slucajeva. Pokusacu na primeru da objasnim jedan od njih:

Primer:
Imate tabelu i kolonu sa gomilom YES i NO vrednosti, koja je pritom jos i indeksirana.
Recimo u tabeli postoji 80+% NO vrednosti i relativno mali broj YES vrednosti (reda radi ispod 20%), koristiti index za NO je sporije nego da se pretrci kroz celu tabelu, a koristiti index za YES je brze. Ako db ima bindovan query on ne zna da li pretrazujete po YES ili NO i ne moze da se pravi pametan i da izabere najbolji nacin za izvrsavanje.

Unosom tacnih vrednosti omogucavate db-u da sam pronadje najbolji nacin za pretragu po tabeli.

----------

Dalje. Vreme izvrsavanja viewa-a u odnosu na obican upit se ne razlikuje.

Fora sa order by je veoma prosta. Ako napravite view koji spaja nekoliko tabela, i vraca recimo 100k redova, veoma je glupo sortirati 100k redova ako cete vecinu upita raditi sa nekim where uslovom koji ce broj redova skratiti za pola ili jos vise. Daklem common sense, bolje je sortirati upit sa manje rezultata nego onaj sa vise

Ako imate upit u view sa order by i napisete isti taj upit dobicete priblizno jednaka vremena izvrsavanja.

----------

Zakljucak svega je, ne mozete za nesto apsolutno tvrditi 'vako je najbolse zato sto sve zavisi od nacina upotrebe i realnih potreba.
cvele je offline   Odgovorite uz citat