stored procedure brzina
Imam jedno pitanje, vezano za stored procedure kod Sql Server-a 2005. Da napomenem da ih nikad nisam pisao. Jedino sam video kako izgledaju.
Pitanje bi glasilo ovako: "Da li je brze izvrsavanje SP-e ili obicnog upita ?". E sada, verovatno da se ovo moze sagledati sa raznih strana. Nema smisla govoriti o zameni upita "select * from users where userid=1" stored procedurom. Ali tamo gde se vrsi join nad vise tabela, ili gde ima dosta podataka za obradu (par hiljada, desetina hiljada slogova) ili pak tamo gde se izvlace podaci koji bi se mozda dobili sekvencijalnim izvrsavanjem par upita. Interesuju me vasa iskustva sa ovim (ukoliko ste ih imali) ? Takodje koliko bi imalo smisla koristiti iste na web-u (opet vezano za brzinu, ako postoji taj speed issue). Moje neko licno misljenje (mozda posto ih nisam koristio) je da je ipak brzina izvrsavanja obicnih upita veca, ali ... mozda to zavisi od slucaja do slucaja ? //edit sada sam bas video jedan zanimljiv tekst http://statestreetgang.net/post/2008...rocedures.aspx |
Načelno, nema mnogo prednosti u korišćenju SP sve dok ne odlučiš da malo veće parčiće koda postaviš u njih (kreiranje nekih temp tabela, rad sa kursorima, prosleđivanje kolekcija kroz parametre kao XML, itd). Sa druge strane, SP ti ostavljaju manje mogućnosti da brljaš (upiti svuda u kodu, sklapanje koje omogućava SQL injection itd).
Moj generalni savet je da ih koristiš. |
Principijelno su direktni SQL upiti brzi od uskladistenih procedura, ali sve zavisi od namjene i kolicine zatrazenih/obradjenih podataka.
Ukoliko imas potrebu za serijskim izvrsavanjem veceg broja upita i za obradom tih dobijenih podataka, onda su uskladistene procedure bolje rjesenje. Iz mog visegodisnjeg iskustva u radu sa Oracleom (jbg, ne radim sa SQL Serverom), mogu ti potvrditi da su direktni SQL upiti daleko brzi nego da koristis uskladistenu proceduru (zato sto Oracle u uskladistenoj proceduri skace sa RDBMS engina na PL/SQL engine i obrnuto, da ne davim sad internim funkcionisanjem baze), ali direktne upite veoma rijetko koristimo, jer nam je baza oko 90% DataWarehouse orjentisana (import podataka, dnevni/sedmicni/mjesecni/kvartalni/godisnji obracuni, export podataka i td.), a 10% OLTP orjentisana (za Web formulare i par aplikacija za rucni unos podataka). Mi imamo poprilican broj uskladistenih procedura, koje se pozivaju iz razlicitih aplikacija radjenih u Javi, C# i Delphiju - zamisli sta bi bilo da smo za svaku aplikaciju morali pisati/prilagodjavati SQL upite... Ili da moras mijenjati neki upit da bi dodao par kolona ili neko ogranicenje u WHERE klauzulu - u proceduri moras samo jednom izmijeniti, a u suprotnom bi u svakoj aplikaciji morao da trazis te upite i mijenjati ih jedno po jedno... Ako podatke zelis samo izlistati iz baze i prikazati na ekranu/papiru, onda pokusaj za tu namjenu koristiti direktni SQL upit. Ukoliko ti je brzina veoma bitna, onda se isplati napisati i kompleksniji SQL upit, nego koristiti uskladistenu proceduru. U svakom drugom slucaju - uskladistena procedura. |
@Dejan Topalovic
Ne verujem (uglavnom uvek) onome sto procitam ili cujem, dok se na ovaj ili onaj nacin, ne uverim sam. A i hvala na odgovorima BTW. Brzina mi je bitna posto se radi o web aplikaciji. Uglavnom baza sa kojom cu da radim je vec u funkciji, koristi se u par drugih desktop aplikacija. Takodje postoje neke gotove procedure koje se koriste,ali neke od njih se bas dugo izvrsavaju, oko 10tak sec. Za web je to rekao bih, puno vremena. Zbog toga sam i pitao o razlici u brzini, posto cu morati neke od tih i sam da koristim. |
@_korso_: Mozes li kopirati source code od tih upita ili procedure, da pokusamo optimizovati upite? Prilozi takodje i DDL izraze (za CREATE TABLE).
|
1 Prilog(a)
Evo koda za jednu SP. Posto je malo veci saljem ga kao attachment. Script tabele trenutno nemam kod sebe.
Posteno ja ne mogu da se snadjem u prilozenoj proceduri, osim sto vidim da je par tabela u igri. |
Citat:
|
Citat:
Ima li neko drugi, ko se bolje razumije u SQL Server, jer sam tu tanak skroz? :D Jedino da portiram source code na Oracle... @_korso_: Pogledao sam malo tvoju proceduru i vidim da se tu podaci provjeravaju i obrađuju po određenim uslovima, tako da ne vjerujem da u ovom slučaju možeš izbjeći korištenje uskladištene procedure... Ovo bih mogao uzeti kao temu za novi tekst na blogu - "Uskladišena procedura vs. direktni SQL upiti". :1014: |
Pa ima kursore - teško da će to moći van SP. :)
A sad, da raspetljavam SP od kilo linija, i to još iz bankarstva, neka hvala, to ni za pare ne radim... ;) |
Citat:
Citat:
Sve u svemu videcu sta cu sa ovim da radim i kako cu da se iskobeljam sa ovim procedurama, jer ima jos par ovakvih a neke idu i do 1,5 K koda. Bice veselo... |
Vreme je GMT +2. Trenutno vreme je 10:07. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.