Topic: pasiulymai optimizuojant
siandien pasijungiu phpmyadmin ir man akys ant kaktos. Viena lentelė su kuria daug darbuojuos turi 31.050 įrašų, užima 1.4MB. Pasirašiau užklausa kad ištrintų nereikalingas eilutes kurių buvo 29. Jos dabartinė struktura tokia:
CREATE TABLE `nw_build` (
`id` int(10) unsigned NOT NULL auto_increment,
`user` int(10) unsigned NOT NULL,
`planet` int(10) unsigned NOT NULL,
`metal` smallint(5) unsigned NOT NULL,
`mineral` smallint(5) unsigned NOT NULL,
`oil` smallint(5) unsigned NOT NULL,
`energy` smallint(5) unsigned NOT NULL,
`metal_build` smallint(4) unsigned NOT NULL,
`mineral_build` smallint(4) unsigned NOT NULL,
`oil_build` smallint(4) unsigned NOT NULL,
`energy_build` smallint(4) unsigned NOT NULL,
`home` smallint(4) unsigned NOT NULL,
`place` smallint(4) unsigned NOT NULL,
`air` smallint(4) unsigned NOT NULL,
`ground` smallint(4) unsigned NOT NULL,
`wall` smallint(3) unsigned NOT NULL,
`barack` tinyint(2) unsigned NOT NULL,
`robot` tinyint(2) unsigned NOT NULL,
`tank` tinyint(2) unsigned NOT NULL,
`fly` tinyint(2) unsigned NOT NULL,
`army` mediumtext character set latin1 collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `Index_2` (`user`,`planet`)
) ENGINE=MyISAM AUTO_INCREMENT=35210;
visa esmė tame jog vienas vartotojas gali turėti daug planetų, ir viena planeta gali tūrėti daug vartotojų, taigi dažniausiai mano sql sakinių gale buna
WHERE `user`='55' and `planet`='444'
Tiesa dar dažnai atlieku sudėties veiksmus, kažkas panašaus į
SELECT SUM(home) as home FROM nw_build WHERE `user`='55'
Taigi, gal dar kaip nors įmanoma supaprastinti duomenų paiešką, kad ši lentelė kuo mažiau stabdytų (dabar kolkas nestabdo).
įrašai kaupiami geometrine progresija :)