[ mojeKorIme @ 26.02.2009. 13:17 ] @
Imam jedan problem koji me strasno nervira.. naime, napravio sam funkciju koja na osnovu nekih parametara izracunava povrsinu

Code:
funkcija(par1,par2,par3,...)


ova funkcija mi je potrebna u upitu koja na osnovu parametara iz iste tablice uzima podatke i racuna tj dijeli vrijednost sa vrijednoscu, povrsinom, koju dobijem iz funkcije na osnovu parametara iz tablice

Code:
select masa1/funkcija(par1,par2,par3,...),
masa2/funkcija(par1,par2,par3,...)
masa3/funkcija(par1,par2,par3,...)
masa4/funkcija(par1,par2,par3,...)
masa5/funkcija(par1,par2,par3,...)
masau/funkcija(par1,par2,par3,...)
.
.
.


moj problem je sto se ovo izvrsava skoro 16 sek. :( nervira me... moze li se ovo nekako optimizovati? ima li neko ideju?

plizzz
[ bogdan.kecman @ 26.02.2009. 13:23 ] @
napravio si funkciju kao

Code:

DELIMITER |
CREATE FUNCTION prosek(n1 INT, n2 INT, n3 INT, n4 INT)
  RETURNS INT
  DETERMINISTIC
  BEGIN
     DECLARE avg INT;
     SET avg = (n1+n2+n3*2+n4*4)/8;
     RETURN avg;
END|
DELIMITER;


ili kao UDF ?

ako je prva varijanta, napravi UDF i resi problem, ima da radi 1000x brze :) (zgodan sajt)

ako ne mozes da napravis UDF onda je jedini nacin da promenis tu funkciju da umesto da je pozivas X puta, da je pozoves jednom ...
[ bogdan.kecman @ 26.02.2009. 13:27 ] @
da, bilo bi korisno da bacis izlaz od:

Code:

EXPLAIN EXTENDED select .... 


dakle da vidimo sta mysql kaze za taj tvoj select ... mozda moze nesto da se uradi bez pravljenja udf-a :)
[ mojeKorIme @ 26.02.2009. 13:30 ] @
UDF... prvi put cujem:) kako da se prebacim na to da vidim kako to sljaka
[ mojeKorIme @ 26.02.2009. 13:34 ] @

evo ga EXPLAIN EXTENDED
Code:

id    select_type    table    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    R    ALL                    12751    100    Using where; Using temporary; Using filesort
1    SIMPLE    V    ref    artikal    artikal    258    database2.R.artikal    1    100    Using index condition
1    SIMPLE    D    ref    radnja,ispostava    ispostava    258    database2.R.ispostava    10    100    Using index condition; Using where
[ bogdan.kecman @ 26.02.2009. 13:42 ] @
dao sam ti link za UDF .. nije bas "da se prebacis" ... to je fora da napravis .so odnosno .dll odnosno .stagodjezatvojoperativnisistemexternabiblioteka tj da napravis u c-u funkciju i onda je dodas u mysql .. mysql je onda vidi kao "nativnu" funkciju te ista radi kao i bilo koja druga mysql funkcija ....

potreban ti je gcc na linuxu ili visual studio na windozama ... imas tamo primere kako se to radi, ako budes imao problema kukaj pa da pomazemo


explain deluje da "moze bolje" ... ali moraces da bacis ceo upit i "show create table imetabele\G" za sve tabele koje ucestvuju u upitu da vidimo da li moze a se popravi
[ bogdan.kecman @ 26.02.2009. 13:44 ] @
evo izguglah par primera za windoze za udf (primeri)

http://www.codeproject.com/KB/database/mygroupconcat.aspx
http://rpbouman.blogspot.com/2...mysql-udfs-with-microsoft.html
[ mojeKorIme @ 26.02.2009. 13:51 ] @
hvala na UDFu... i
poslao sam ti PP i hvala jos jedanput..