Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

zamršen upit nikako da ga otpetljam

[es] :: MySQL :: zamršen upit nikako da ga otpetljam

[ Pregleda: 1964 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
92.36.241.*



+1 Profil

icon zamršen upit nikako da ga otpetljam04.03.2009. u 12:12 - pre 184 meseci
kako najoptimalnije napraviti sljedeće
trebam znci, sumu grupe podijeliti sa ukupnom sumom.. dole je primjer jednostavnog upita...
u stvarnosti je puno zamrseniji.. pokusao sam i sa pravljenjem funkcija.. ali je presporo

Code:
select sum(broj*koef)/(select sum(broj*koef) from tabela) from tabela 
group by vrsta

Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: zamršen upit nikako da ga otpetljam04.03.2009. u 12:48 - pre 184 meseci
Code:

mysql> create table t3 (id bigint auto_increment primary key, x int, y int) engine=innodb;
Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> insert into t3 (x,y) select x,y from t1;
Query OK, 1250000 rows affected (10.77 sec)
Records: 1250000  Duplicates: 0  Warnings: 0

mysql> update t3 set x = id % 15, y = id % 10;
Query OK, 1250000 rows affected (9.48 sec)
Rows matched: 1250000  Changed: 1250000  Warnings: 0

mysql> SELECT SUM(x)/(SELECT SUM(x) FROM t3) FROM t3 GROUP BY y;
+--------------------------------+
| SUM(x)/(SELECT SUM(x) FROM t3) |
+--------------------------------+
|                         0.0714 | 
|                         0.0857 | 
|                         0.1000 | 
|                         0.1143 | 
|                         0.1286 | 
|                         0.0714 | 
|                         0.0857 | 
|                         0.1000 | 
|                         0.1143 | 
|                         0.1286 | 
+--------------------------------+
10 rows in set (1.13 sec)

mysql> SELECT SUM(x*0.7)/(SELECT SUM(x*0.7) FROM t3) FROM t3 GROUP BY y;
+----------------------------------------+
| SUM(x*0.7)/(SELECT SUM(x*0.7) FROM t3) |
+----------------------------------------+
|                                0.07143 | 
|                                0.08571 | 
|                                0.10000 | 
|                                0.11429 | 
|                                0.12857 | 
|                                0.07143 | 
|                                0.08571 | 
|                                0.10000 | 
|                                0.11429 | 
|                                0.12857 | 
+----------------------------------------+
10 rows in set (1.35 sec)

mysql> set @S = (SELECT SUM(x*0.7) FROM t3);
Query OK, 0 rows affected (0.68 sec)

mysql> select @S;
+-----------+
| @S        |
+-----------+
| 6124986.0 | 
+-----------+
1 row in set (0.00 sec)


mysql> SELECT SUM(x*0.7)/@S FROM t3 GROUP BY y;
+---------------+
| SUM(x*0.7)/@S |
+---------------+
|       0.07143 | 
|       0.08571 | 
|       0.10000 | 
|       0.11429 | 
|       0.12857 | 
|       0.07143 | 
|       0.08571 | 
|       0.10000 | 
|       0.11429 | 
|       0.12857 | 
+---------------+
10 rows in set (1.00 sec)


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: zamršen upit nikako da ga otpetljam04.03.2009. u 12:55 - pre 184 meseci
1 sekund na obicnoj desktop masini, na mysql-u optimizovanom za klaster a ne za innodb sa 1M2 slogova ..

ovde ti je najbitniji IO .. citas celu tabelu .. dakle treba tu celu tabelu procitati, sama racunica je tu sitnica ..

nemas sta mnogo da optimizujes u ovakvom upitu osim da onaj subquery izbacis u varijablu pre query-a
 
Odgovor na temu

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
92.36.241.*



+1 Profil

icon Re: zamršen upit nikako da ga otpetljam04.03.2009. u 13:36 - pre 184 meseci
pozdrav bogdane i svaka cast na pomoci..
u pitanju je sto grupiram podatke po vrsti artikla i po odjelu odnosno odsjeku.. ovde mi treba takav upit koji ce za pojedini artikal uzeti sumu za taj odsjek i podjeliti sa ukupnom sumom svih artikala za taj odsjek i tako za sve odsjeke..
ps. culi smo se preko pp-a.. kada ubacim sirovi select .. umjesto one funkcije radi za 5. sec.. sad sam imao potrebu redi izvjestaja ponovo mijenjati upit... i ne znam kako da ga napisem da mi radi relativno brzo;/

jos jednom... puno ti hvala
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: zamršen upit nikako da ga otpetljam04.03.2009. u 14:04 - pre 184 meseci
vidi pricamo prilicno napamet ali evo jedna stvar koja ti mozda pomogne http://dev.mysql.com/doc/refma...yntax-prepared-statements.html

Code:

mysql>set @t='mysql.user';
Query OK, 0 rows affected (0,00 sec)

mysql>set @q=CONCAT('select host, user from ', @t, ' where user=\'root\'');
Query OK, 0 rows affected (0,00 sec)

mysql>prepare s1 from @q;
Query OK, 0 rows affected (0,00 sec)
Statement prepared

mysql>execute s1;
+-----------+------+
| host | user |
+-----------+------+
| 127.0.0.1 | root |
| localhost | root |
+-----------+------+

mysql>deallocate prepare s1;
Query OK, 0 rows affected (0,00 sec)



 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: zamršen upit nikako da ga otpetljam04.03.2009. u 15:17 - pre 184 meseci
pre nego bilo sta menjas (upit ti jeste prekomplikovan sa osnovnim problemom koristenja IF() klauzule) uradi sledece:

1. povecaj innodb_buffer_pool_size na 80% od ukupne kolicine RAM-a koju imas u masini (moras da ugasis mysql regularno, ubijes log file, promenis parametar, upalis mysql)
2. povecaj query_cache na 10M http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

i onda probaj koliko ce sta da traje
 
Odgovor na temu

[es] :: MySQL :: zamršen upit nikako da ga otpetljam

[ Pregleda: 1964 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.