CREATE TABLE IF NOT EXISTS `baza` ( `UID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) CHARACTER SET latin1 NOT NULL, `lvl` int(3) DEFAULT NULL, `voc` varchar(30) CHARACTER SET latin1 DEFAULT NULL, `guild` varchar(30) DEFAULT NULL, `sex` varchar(7) DEFAULT NULL, `world` varchar(20) NOT NULL, `joined` int(10) NOT NULL, `lastlogin` int(10) DEFAULT NULL, `created_acc` int(10) DEFAULT NULL, `city` varchar(30) DEFAULT NULL, PRIMARY KEY (`UID`), KEY `name` (`name`), KEY `guild` (`guild`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=185322 ;
W jednej jest 165tyś rekordów (23mb), w drugiej 270 tyś (33mb). Wykonuje paczki po 4 update na każdej bazie. Zapytanko wygląda mniej więcej tak:
mysql_query("UPDATE baza SET lvl=".$record[level].", voc='".$record[vocation]."', guild='".$record[guild]."', sex='".$record[sex]."', lastlogin=".$record[lastlogin].", created_acc='".$record[created]."', city='".$record[residence]."' WHERE UID=".$record[uid]);
Najpierw baza z 165tyś rekordów i czasy wykonania 4 update w cyklu:
0.0023970603942871 sec
0.0020239353179932 sec
0.002047061920166 sec
0.0020139217376709 sec
0.0020439624786377 sec
0.0020511150360107 sec
0.0022640228271484 sec
0.0016040802001953 sec
0.0011930465698242 sec
0.0021450519561768 sec
0.0013589859008789 sec
0.0019218921661377 sec
Suma czasu dla 50 zapytań update: 4.3591480255127 sec
To samo na większej bazie (270tyś), też po 4 zapytania w cyklu:
0.012955188751221 sec
0.0023949146270752 sec
1.7737629413605 sec
0.16048979759216 sec
0.24561595916748 sec
0.15996599197388 sec
0.22124600410461 sec
0.26379299163818 sec
0.2989809513092 sec
0.18192505836487 sec
0.0041689872741699 sec
0.027604103088379 sec
0.53889012336731 sec
Suma dla 50 zapytań: 8.4705171585083 sec
Czym mogą być spowodowane tak duże rozbieżności w czasue wykonania tak prostego update? Różnica w ilości rekordów nie jest duża, zaledwie 100tyś. Co można zrobić aby poprawić efektywność zapytań?