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

MySQL - pregled ukupne količine u svakog dana u mjesecu

[es] :: MySQL :: MySQL - pregled ukupne količine u svakog dana u mjesecu

[ Pregleda: 2882 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

codeb.s

Član broj: 67549
Poruke: 157
*.teol.net.



+1 Profil

icon MySQL - pregled ukupne količine u svakog dana u mjesecu15.02.2011. u 05:46 - pre 160 meseci
Pozdrav,

Moj problem se sastoji u izradi sql-a za sledeći problem
Imam tabelu Artikli sa određenim brojem artikala (podaci o artiklu) i imam tabelu Prodaja u kojoj se nalazi evidencija prodaje tj. imam stalan broj artikala koji se prodaju u toku svakog dana u mjesecu (bilježi se datum i ArtikalID i količina...) Tabele su povezane preko ArtikalID-a
Trebam napraviti pregled da su nazivi kolona Artiklal, 01, 02....31 (dani u mjesecu) a u rows se nalaze nazivi pojedinih aktikala npr. Artikal1, Artikal2.... pa količina prodana u toku tog dana.
Ima li ko ideju kako bi trebao glasiti sql?

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu16.02.2011. u 00:01 - pre 160 meseci
1. napisi tacno kako ti izgledaju te tabele?
2. taj upit ce ti biti uzasan :(


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu16.02.2011. u 00:19 - pre 160 meseci
primer:

data:
Code:

CREATE TABLE `a` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(100) DEFAULT NULL
);

CREATE TABLE `p` (
  `a_id` int(11) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `k` int(11) DEFAULT NULL
) ;

INSERT INTO `a` VALUES (1,'kukuruz'),(2,'psenica'),(3,'govedo'),(4,'monitor'),(5,'procesor'),(6,'krompir');

INSERT INTO `p` VALUES (1,'2010-01-01',1),(1,'2010-01-01',1),(1,'2010-01-01',1),(1,'2010-01-01',1),
(1,'2010-01-01',2),(1,'2010-01-03',2),(1,'2010-01-03',2),(1,'2010-01-03',2),(1,'2010-01-04',2),(1,'2010-01-04',2),
(1,'2010-01-04',2),(1,'2010-01-04',2),(1,'2010-01-05',2),(1,'2010-01-05',2),(1,'2010-01-05',2),(1,'2010-01-05',2),
(1,'2010-01-10',2),(1,'2010-01-10',2),(1,'2010-01-10',2),(1,'2010-01-10',2),(2,'2010-01-10',2),(2,'2010-01-10',2),
(2,'2010-01-10',2),(2,'2010-01-10',2),(2,'2010-01-12',2),(2,'2010-01-12',2),(2,'2010-01-12',2),(2,'2010-01-12',2),
(2,'2010-01-01',2),(2,'2010-01-01',2),(2,'2010-01-01',2),(2,'2010-01-01',2),(3,'2010-01-15',2),(3,'2010-01-15',2),
(3,'2010-01-15',2),(3,'2010-01-15',2),(4,'2010-01-15',2),(4,'2010-01-15',2),(4,'2010-01-15',2),(4,'2010-01-15',2),
(4,'2010-01-16',2),(4,'2010-01-16',2),(4,'2010-01-16',2),(4,'2010-01-16',2),(5,'2010-01-16',2),(5,'2010-01-16',2),
(5,'2010-01-16',2),(5,'2010-01-16',2),(5,'2010-01-26',2),(5,'2010-01-26',2),(5,'2010-01-26',2),(6,'2010-01-26',2),
(6,'2010-01-26',2),(6,'2010-01-26',2),(6,'2010-01-26',2),(6,'2010-01-26',2),(6,'2010-01-22',2),(6,'2010-01-26',2),
(6,'2010-01-26',2),(6,'2010-01-26',2),(6,'2010-01-26',2),(6,'2010-01-16',2),(6,'2010-01-16',2),(6,'2010-01-16',2),
(6,'2010-01-16',2),(6,'2010-01-16',2),(6,'2010-01-06',2),(6,'2010-01-06',2),(6,'2010-01-06',2),(6,'2010-01-06',2),
(6,'2010-01-06',2);


upit:
Code:

mysql> select 
    ->   x.a_name, 
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=1  and p.a_id=x.a_id) as  d1,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=2  and p.a_id=x.a_id) as  d2,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=3  and p.a_id=x.a_id) as  d3,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=4  and p.a_id=x.a_id) as  d4,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=5  and p.a_id=x.a_id) as  d5,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=6  and p.a_id=x.a_id) as  d6,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=7  and p.a_id=x.a_id) as  d7,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=8  and p.a_id=x.a_id) as  d8,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=9  and p.a_id=x.a_id) as  d9,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=10 and p.a_id=x.a_id) as d10,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=11 and p.a_id=x.a_id) as d11,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=12 and p.a_id=x.a_id) as d12,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=13 and p.a_id=x.a_id) as d13,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=14 and p.a_id=x.a_id) as d14,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=15 and p.a_id=x.a_id) as d15,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=16 and p.a_id=x.a_id) as d16,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=17 and p.a_id=x.a_id) as d17,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=18 and p.a_id=x.a_id) as d18,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=19 and p.a_id=x.a_id) as d19,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=20 and p.a_id=x.a_id) as d20,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=21 and p.a_id=x.a_id) as d21,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=22 and p.a_id=x.a_id) as d22,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=23 and p.a_id=x.a_id) as d23,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=24 and p.a_id=x.a_id) as d24,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=25 and p.a_id=x.a_id) as d25,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=26 and p.a_id=x.a_id) as d26,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=27 and p.a_id=x.a_id) as d27,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=28 and p.a_id=x.a_id) as d28,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=29 and p.a_id=x.a_id) as d29,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=30 and p.a_id=x.a_id) as d30,
    ->   (select sum(p.k) from p  where DAYOFMONTH(p.d)=31 and p.a_id=x.a_id) as d31
    -> 
    ->  from a x group by x.a_id;
+----------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| a_name   | d1   | d2   | d3   | d4   | d5   | d6   | d7   | d8   | d9   | d10  | d11  | d12  | d13  | d14  | d15  | d16  | d17  | d18  | d19  | d20  | d21  | d22  | d23  | d24  | d25  | d26  | d27  | d28  | d29  | d30  | d31  |
+----------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| kukuruz  |    6 | NULL |    6 |    8 |    8 | NULL | NULL | NULL | NULL |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| psenica  |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |    8 | NULL |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| govedo   | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| monitor  | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |    8 |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| procesor | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |    8 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |    6 | NULL | NULL | NULL | NULL | NULL |
| krompir  | NULL | NULL | NULL | NULL | NULL |   10 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |   10 | NULL | NULL | NULL | NULL | NULL |    2 | NULL | NULL | NULL |   18 | NULL | NULL | NULL | NULL | NULL |
+----------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
6 rows in set (0.01 sec)

mysql> 


kao sto rekoh, uzasno

ono sto jos mozes je da imas neku tabelu u kojoj imas 1-31 pa da je pomnozis .. ili ... sve zavisi sta tacno hoces ..
 
Odgovor na temu

codeb.s

Član broj: 67549
Poruke: 157
*.teol.net.



+1 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu16.02.2011. u 17:42 - pre 160 meseci
Hvala na odgovoru...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu16.02.2011. u 20:35 - pre 160 meseci
obrati samo paznju da je ovo OCAJNO SPORO!!!! tako da bolje da napravis malo drugaciji dizajn baze ili malo drugaciji nacin da pravis te reporte ...

osim sto imas 31 subselect ... tj za svaki distinct a_name ti pravis 31 upit ... ovi subselecti su svaki za sebe odvatno spori posto koriste index samo za a_id, za d ne mogu da koriste index zato sto se d nalazi unutar funkcije ..

sve u svemu, tuga i ocaj .. meni kad bi zaposleni napisao ovakav upit nogirao bi ga istog trenutka ..

 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu16.02.2011. u 21:13 - pre 160 meseci
Citat:
bogdan.kecman: obrati samo paznju da je ovo OCAJNO SPORO!!!! tako da bolje da napravis malo drugaciji dizajn baze ili malo drugaciji nacin da pravis te reporte ...

osim sto imas 31 subselect ... tj za svaki distinct a_name ti pravis 31 upit ... ovi subselecti su svaki za sebe odvatno spori posto koriste index samo za a_id, za d ne mogu da koriste index zato sto se d nalazi unutar funkcije ..

sve u svemu, tuga i ocaj .. meni kad bi zaposleni napisao ovakav upit nogirao bi ga istog trenutka ..


Šta bi ti predložio kao rešenje ovog problema? Jel moguće nekako da se vrši grupisanje po redovima u 31 grupu (ili 30, zavisi koliko ima dana) pa da se u aplikaciji uradi nešto po tom pitanju?
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 115
*.teol.net.



+1 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu17.02.2011. u 14:45 - pre 160 meseci
kazes ovako
select sum(if(day(datum)=1,iznos,0)) as iznos_1,sum(if(day(datum)=2,iznos,0)) as iznos_2 ..... sum(if(day(datum)=30,iznos,0)) as iznos_31 from prodaja order by artikl.

imam isti izvjestaj i ovako radi, nije sporo, niti trebas pisati 30 selecta.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 14:26 - pre 160 meseci
@orome, na zalost taj upit je jos sporiji :( ... nije spor samo ako tabela ima nekoliko redova .. posto IF() apsolutno izbacuje mogucnost upotrebe indexa :(

i u jednom i u drugom slucaju, ne valja :(

@biske, generalno se ovakvi izvestaji prave iz "predpripremljenih podataka" ... dakle ne prave se obicno iz relacione baze vec se pravi "medju state" iz koga se prave ovakvi izvestaji. Taj medju-state se obicno "odrzava" trigerima mada ga je moguce i praviti "po potrebi" .. te tabele su poprilicno denormalizovane ali se iz njih lako generisu razni reporti, predstavljaju duplikat podataka iz relacionog modela preprocesiran za brze izvestaje
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 17:59 - pre 160 meseci
Nema potrebe za tolikim sql-ovima a kada dobijes rezultat sam izgled kolona i redova treba da je posao programskog jezika u kojem radis.
Brzina zavisi koliko prodaje i artikala imas ali mislim da je svakako brze od predhodnih predloga.
Code (sql):


SELECT SUM(kol)AS kolicina, naziv, datum
FROM prodaja p
LEFT JOIN artikli a ON a.id=p.artikal_id
GROUP BY DAY(datum),artikal_id
ORDER BY datum
WHERE datum>='2011-01-01' AND datum<'2011-02-01'

 



[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
46.188.179.*



+19 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 18:00 - pre 160 meseci
da se nadovežem na bogdana, možeš napraviti i neki mini data warehouse sa agregatnim tablicama(ono što je predložio bogdan).

a ako ti trebaju podaci samo za analizu, imaš excel, spoji se na bazu iz excela, povuci te dvije tabele i stavi ih u pivot table i to je to.

 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
46.188.179.*



+19 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 18:02 - pre 160 meseci
Citat:
VladaSu: Nema potrebe za tolikim sql-ovima a kada dobijes rezultat sam izgled kolona i redova treba da je posao programskog jezika u kojem radis.


ne treba čak ni to, dovoljan je report generator sa mogućnostima matrix tablice ili excel.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 18:17 - pre 160 meseci
@vladasu, oni imaju problem sto koriste neke "reportere" koji imaju mogucnost da im das "jedan sql" i oni ti nacrtaju report ... a koji traze da im platis neki dinar ako hoces da taj report napravis "advanced" (sa malo programiranja i vise od jednog upita) i onda izvode ove kerefeke da naprave sql koji ce im generisati report a da ga onda samo neki report generator "nacrta" ...

markic, pusti prijatelju excell .. to je jos gore od onih report generatora :D :D :D

sve se generalno svodi na dizajn i na potrebe ... ako imas potrebe da pustas 5-6 reporta dnevno - dakle ako ce stvarno neko da gleda reporte non stop (ima toga vrlo cesto) - preprocesirane tabele odrzavane trigerima su jedino resenje koje nece da te kosta mnogo ... njih onda spremis kako god ti odgovara i odrzavas ih .. i sve reporte vadis iz njih ... ako nemas potrebe za tim nego report pravis par puta nedeljno onda nema potrebe da opterecujes inserte i update trigerima vec ti se isplati da pravis report ispocetka onda kad ti treba ... u tom slucaju pravis sto optimalniji upit da sto brze dodjes do podataka koji ti trebaju, a onda te podatke rotiras i formatiras "kako ti volja" u svojoj aplikaciji (kako je vladasu lepo rekao) ..

obratite paznju samo jos jednom na stvari poput DAY(datum) ... dakle ova vrlo jednostavna funkcija usporava rad mnogostruko .. ja razumem da vi uglavnom radite sa bazama od par stotina slogova, posebno dok razvijate, ali to ce rasti .. DAY(datum) ne dozvoljava da se za kolonu datum koristi index, dakle ako je ikako moguce uradite GROUP BY datum, a onda u svojoj aplikaciji odradite vadjenje dana ... ili dodajte u select ... dakle nesto tipa

SELECT datum, DAY(datum) ... group by datum;

ili ako morate da poredite umesto DAY(datum) = 1 .. stavite nesto tipa datum='2011-11-7' ... ili ako vam recimo treba cesto informacija o tome koliko je nesto prodavanog "svakog prvog u mesecu" - dodajte u tabelu kolonu DAN i popunjavajte je kada popunjavate i tabelu (ili mozete i trigerom da je punite) .. posto upiti tipa ovih koji su bili u ovom thread-u kostaju oooozbiljne perfomanse ... nad jednom realno malom tabelom od milion slogova takav upit ce trajati 3-4 sata ... ili vise

 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
46.188.179.*



+19 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 18:41 - pre 160 meseci
ovisi u kojem jeziku radiš, ako radiš web app, uzmeš xml, xslt,xquery i html i to ti je dosta.
napraviš skriptu za export u xml i koristiš navedene tehnologije, jedina mana je da nemaš drill down,drill down može se napraviti u javascriptu, ali....
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu18.02.2011. u 22:19 - pre 160 meseci
@bogdan.kecman
Nisam nigde video da je naveo da radi u nekim report programima.
Nemam predstavu sa kojom kolicinom podataka radi.
Sada sam probao na tabeli od 4 miliona recorda group by day(datum), col_2 i query mi je trajao 2s. (nema left join, mada ne bi smeo da ga uspori a i moze i kasnije da ga nakaci)
Lepa je ta prodavnica sto ima vise od 4 miliona prodaja tokom jednog meseca :)

Svakako moze da izdvoji day. Ono sto sam naveo nije konacan query nego vise kao osnova da razmislja u drugom pravcu.


[Ovu poruku je menjao VladaSu dana 18.02.2011. u 23:48 GMT+1]
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu19.02.2011. u 23:26 - pre 160 meseci
Citat:
VladaSu
Nisam nigde video da je naveo da radi u nekim report programima.


nije, ali je zadnje 2-3 nedelje bilo nekoliko tema sa slicnim problemima i u vecini slucajeva jesu pominjali taj neki report program .. mislim da je isti op bio u pitanju

Citat:

Nemam predstavu sa kojom kolicinom podataka radi.

nije ni bitno, sa malo podataka uvek sve extra radi

Citat:

Sada sam probao na tabeli od 4 miliona recorda group by day(datum), col_2 i query mi je trajao 2s. (nema left join, mada ne bi smeo da ga uspori a i moze i kasnije da ga nakaci)

bice da ti je to odlicno iskesirano u ram .. group by day(datum) radi full table scan, sto znaci da mora da procita sve rekorde iz tabele (4 miliona komada za 2 sec, ili je sve vec bilo u ramu, ili imas neki mnogo brz disk)... jedino ako nisi limitirao broj slogova sa nekim dodatnim uslovom (npr where datum > '2011-02-10', pa je onda full table scan isao samo kroz zadnjih par dana) ... mada, cak i u slucaju kada se limitira broj slogova kroz koje ide full table scan, to ce ici "jednom, u jednom tredu" brzo, ali ce napraviti ogroman IO, kada imas nekoliko takvih upita u paraleli exponencijalno raste vreme i opterecenje servera :( ...

kao sto rekoh, ako su ovakvi izvestaju potrebni "cesto" - medju tabele su jedino ozbiljno resenje

da ponovim opet ... onaj upit sa 31 subselect - ja to da vidim kod mene u firmi, covek bi "iz mesta" dobio nogu
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
178.160.102.*



+19 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu20.02.2011. u 14:16 - pre 160 meseci
testirano na 4 M slogova koji se nalaze u rasponu od 1.1.2010 do 31.1.2010


Code:

SELECT DAY(datum) AS dan,SUM(količina) FROM test  WHERE datum BETWEEN '2010-01-01' AND  '2010-01-31'
GROUP BY DAY(datum)


query traje oko cca. 6,5 s, dok count traje 4 s, a sumiranje po količini cca. 4,2 s.

na laptopu intel dual core 2.2 GH, 3 GB rama, 32 bitni windowsi 7
verzija mysql 5.1.50.
innodb_buffer_pool_size=1600M



a 5.5.x radi još bolje.
sumiranje cca. 10 M slogova traje 4 , vrijednosti su generirane sa rand funkcijom, tipa x*rand()*20 i sl.
mislim da sam stavio innodb_buffer_pool_size oko 1800MB, a imam 6GB rama.

64 bitni windowsi 7

kad sam probao 5.5.x dodijeliti više od 2 GB rama, više mi se mysql nije htio dignut, kad sam spustio opet je radio???
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: MySQL - pregled ukupne količine u svakog dana u mjesecu21.02.2011. u 09:20 - pre 160 meseci
Citat:
bogdan.kecman: bice da ti je to odlicno iskesirano u ram .. group by day(datum) radi full table scan, sto znaci da mora da procita sve rekorde iz tabele (4 miliona komada za 2 sec, ili je sve vec bilo u ramu, ili imas neki mnogo brz disk)... jedino ako nisi limitirao broj slogova sa nekim dodatnim uslovom (npr where datum > '2011-02-10', pa je onda full table scan isao samo kroz zadnjih par dana) ... mada, cak i u slucaju kada se limitira broj slogova kroz koje ide full table scan, to ce ici "jednom, u jednom tredu" brzo, ali ce napraviti ogroman IO, kada imas nekoliko takvih upita u paraleli exponencijalno raste vreme i opterecenje servera :( ...

kao sto rekoh, ako su ovakvi izvestaju potrebni "cesto" - medju tabele su jedino ozbiljno resenje

da ponovim opet ... onaj upit sa 31 subselect - ja to da vidim kod mene u firmi, covek bi "iz mesta" dobio nogu


Nije kesirano, koristim xp. mysql 5.5 default podesavanja. Na linuxu trebalo bi jos brze da radi.
Nije bilo where, citao sam sve slogove i nisam kesirao.
Za disk koristim ssd ali ipak sumnjam da ce mesecno imati 4mil rekorda.
Ali slazem se da treba napraviti da to jos brze moze da se odradi.


[Ovu poruku je menjao VladaSu dana 21.02.2011. u 10:33 GMT+1]
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: MySQL - pregled ukupne količine u svakog dana u mjesecu

[ Pregleda: 2882 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

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