zanimljivi rezultati, doduse ne preterano validni posto je test neprecizan :(
generalno, mnogo sve zavisi od konfiguracije, sto masine, sto mysql-a, koliki je innodb buffer pool na primer za innodb, posto ti je mozda ceo prvi test iskesiran a dok izvrsavas drugi test tu ti ulazi vreme snimanja prvog testa na disk + izvrsavanje drugog testa .. i slicno .. za myisam opet .. system file cache .. koliki je i slicno ...
najbolje bi bilo kada bi mogao da, resetujes mysql pre svakog testa i odradis "sync" pre svakog i posle svakog testa :)
btw, vezano za disable keys ... mysql mora da napravi kljuceve pa mora, da bi tabela bila validna, fora kod disable keys je da myisam ima foru da brze izgenerise kljuceve odjednom nad tabelom nego insert po insert ... kod innodb-a to nije slucaj i trebalo bi da je "tu negde" po brzini sa i bez disable keys ...
ono sto je bitno je da tvoja primer tabela nije "idealna" cak - obrnuto je od idealne posto ima samo unique kljuceve (koji nisu afektirani ovim pristupom i potvrdno ovaj pristup usporava sistem umesto da ubrzava)... dakle, samo non unique kljucevi su impaktirani ovim pristupom, za unique kljuceve "disable key" ne radi nista, a enable key mora da prodje kroz sve da proveri el sve ok (sto dodatno uspori proces) ...
probaj sa:
Code:
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`x` int(11) DEFAULT NULL,
`y` int(11) DEFAULT NULL,
KEY `x` (`x`),
KEY `y` (`y`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
evo primer kod mene
Code:
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../nobulk.sh )
real 0m3.155s
user 0m0.292s
sys 0m0.288s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../bulk.sh )
real 0m0.127s
user 0m0.010s
sys 0m0.002s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../endis.sh )
real 0m2.217s
user 0m0.303s
sys 0m0.317s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../endisbulk.sh )
real 0m0.132s
user 0m0.010s
sys 0m0.001s
dakle ..
1 po 1 .. 100K komada
3.155
1 po 1 .. 100K komada sa disable/enable key
2.217sec
bulk 100K komada
0.127
bulk 100K komada sa disable/enable
0.132sec
sta mozemo da zakljucimo ... da kod bulk-a i nije neko poboljsanje .. sto je normalno posto bulk svejedno (sam za sebe jedan jedini) doda pa odradi key sto znaci da smo samo ima 2 statementa vise nego bez disable/enable key ... ali da je tu bilo 6 bulkova umesto samo jedan bilo bi neke znacajnije razlike (btw ova razlika od 0.01sec vise ima veze sa tim da li ja mrdam misa tokom testa nego sa realnim rezultatima a mrzi me sad da pravim test sa 500K redova ili vise posto bi to mozda napravilo neku znacajniju razliku)
kod normalnog inserta vidimo vec ozbiljnu razliku (1sec ili 30% ubrzanje) koje donosi disable/enable key ...
obrati paznju na izgled tabele .. dakle ovo je "idealna" tabela nad kojom ovakav pristup donosi ubrzanje, nema unioque indexa (na koje se to inace ne odnosi) i sva polja (oba) su kljucevi (non unique)....
e sad .. ista stvar za innodb ... (identicna tabela samo innnodb)
Code:
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../nobulk.sh )
real 0m34.017s
user 0m0.343s
sys 0m0.281s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../bulk.sh )
real 0m0.712s
user 0m0.007s
sys 0m0.006s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../endis.sh )
real 0m33.850s
user 0m0.300s
sys 0m0.294s
[arhimed@gedora10 bin]$ time (./mysql -uroot test < ../../endisbulk.sh )
real 0m0.727s
user 0m0.009s
sys 0m0.001s
sta reci .. osim da je inndb u "standardnom insertu" mnogo sporiji od myisam-a .. disable/enable key nije napravio skoro nikakvu razliku .. (0.2sec za obican i 0.01sec za bulk - sto je kao sto napomenuh razlika da li mi je stigla poruka na skype dok je isao test ili sam mrdno misa) ....