Code:
mysql> show create table t4\G
*************************** 1. row ***************************
Table: t4
Create Table: CREATE TABLE `t4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`naziv` char(30) DEFAULT NULL,
`kolicina` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10485762 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> select count(*) from t4;
+----------+
| count(*) |
+----------+
| 10485760 |
+----------+
1 row in set (0.00 sec)
dakle, 10M slogova .. rekao bih dosta vece od tvoje tabele
Code:
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina group by t4.naziv;
+--------+-------+----------+
| id | naziv | kolicina |
+--------+-------+----------+
| 649026 | mika | 100000 |
| 375920 | pera | 100000 |
| 577518 | zika | 100000 |
+--------+-------+----------+
3 rows in set (7.00 sec)
ocajno sporo .. 10M slogova 7 sekundi .. mnoooooooooogo ... al to ti je sto ti je .. jos sporije sa sa inndb-om ..
Code:
mysql> alter table t4 engine=innodb;
Query OK, 10485760 rows affected, 1 warning (1 min 25.07 sec)
Records: 10485760 Duplicates: 0 Warnings: 0
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina group by t4.naziv;
+--------+-------+----------+
| id | naziv | kolicina |
+--------+-------+----------+
| 649026 | mika | 100000 |
| 375920 | pera | 100000 |
| 577518 | zika | 100000 |
+--------+-------+----------+
3 rows in set (10.44 sec)
malo brze ako zabodemo onaj poslednji group by .. ali ne znacajno
Code:
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina;
+----------+-------+----------+
| id | naziv | kolicina |
+----------+-------+----------+
| 375920 | pera | 100000 |
| 577518 | zika | 100000 |
..........
| 649026 | mika | 100000 |
| 10225520 | pera | 100000 |
+----------+-------+----------+
63 rows in set (10.39 sec)
ako skratimo tu na "par hiljada" slogova (posto ti rece da ti tabela ima par hiljada slogova)
Code:
mysql> select count(*) from t4;
+----------+
| count(*) |
+----------+
| 9999 |
+----------+
1 row in set (0.00 sec)
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina;
+------+-------+----------+
| id | naziv | kolicina |
+------+-------+----------+
| 6141 | pera | 99996 |
| 6874 | zika | 99883 |
| 8355 | mika | 99987 |
| 8934 | zika | 99883 |
+------+-------+----------+
4 rows in set (0.92 sec)
i dalje spooooorooooooooooo
e sad .. razmislis malo popijes kafu ..
Code:
mysql> alter table t4 add key(kolicina);
Query OK, 9999 rows affected, 2 warnings (0.62 sec)
Records: 9999 Duplicates: 0 Warnings: 0
mysql> show create table t4\G
*************************** 1. row ***************************
Table: t4
Create Table: CREATE TABLE `t4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`naziv` char(30) DEFAULT NULL,
`kolicina` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `kolicina` (`kolicina`)
) ENGINE=MyISAM AUTO_INCREMENT=10485762 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina;
+------+-------+----------+
| id | naziv | kolicina |
+------+-------+----------+
| 8355 | mika | 99987 |
| 6141 | pera | 99996 |
| 6874 | zika | 99883 |
| 8934 | zika | 99883 |
+------+-------+----------+
4 rows in set (0.00 sec)
[/quote]
DZBENG :) aj da opet probamo sa mnogo slogova
Code:
mysql> select count(*) from t4;
+----------+
| count(*) |
+----------+
| 1279872 |
+----------+
1 row in set (0.00 sec)
mysql> select t4.id, t4.naziv, t4.kolicina from t4, (select naziv, max(kolicina) kolicina from t4 group by naziv) x where t4.naziv = x.naziv and t4.kolicina=x.kolicina group by t4.naziv;
+----------+-------+----------+
| id | naziv | kolicina |
+----------+-------+----------+
| 10596516 | mika | 100000 |
| 11243666 | pera | 100000 |
| 10510796 | zika | 100000 |
+----------+-------+----------+
3 rows in set (0.29 sec)
bolje od toga nece :(
no ... abitno za sam upit, kakvu god statistiku da vadis i kakav god ti report treba, vadjenje istog svake sekunde je rezolucija koju ne mozes da iskoristis ni za sta .. da vuces neki stat na minut pa ajde ali sve i da prodajes 100 artikala u sekundi, 1min statistika je dovoljno velika rezolucija, cak je i 5imn statistika vise nego dovoljna .. informacija da li se vise prodalo sa rezoluciojom vecom od 30minuta je beskorisna .. za neke stvari je 5min neophodno .. sve ispod je lab experiment koji traje par sekundi pa je bitno pokupiti sav data na vreme .. no i tada, logujes sav data tih par sekundi pa ga posle obradjujes na tenane ...
dakle probaj da ne preterujes sa "tacnoscu" :) ... bilo kakav izvestaj sa greskom od par sekundi je "ok" za 99.999999999% primena
dalje ... ako ti stvarno treba "real time" data onda nemoj da generises izvestaj svake sekunde nego iskoristi trigere i update-uj neku tabelu na svaku promenu ... dakle, za T4, na svaki insert / update odradi update neke tabele gde drzis unique parove naziv/max_kolicina il ista ti je vec taj podatak, eventualno, tamo generisi taj report koji ti treba .. tako da imas real time data u toj nekoj "report" tabeli koji se generise pri svakoj promeni podataka ... mnogo bolje nego da svake sekunde teras generisanje ...
p.s. ignorisi ove warninge koji se vide u primeru, to mysql kuka da ne moze da nadje ndbcluster engine posto sam samo startovao sql nod a klaster nodovi su ugaseni