Topic: Index'sai stabdo???
O buvo taip... Susigeneravau vardų ir pavardžių lentelę:
CREATE TABLE `names` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`value` varchar(32) CHARACTER SET utf8 COLLATE utf8_lithuanian_ci NOT NULL,
`type` enum('1','2') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1',
`sex` enum('N','F','M') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
`lang` enum('EN','LT') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'EN',
`prior` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `type` (`type`),
KEY `sex` (`sex`),
KEY `lang` (`lang`),
KEY `prior` (`prior`)
) ENGINE=MyISAM AUTO_INCREMENT=88801 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Kurioje yra 90000 įrašų. Taigi paleidau dvi užklausas, kurios davė vienodą rezultatą (nes visi type buvo vieno):
SELECT * FROM `names` ORDER BY RAND() LIMIT 1 <-- vykde 0.111s
SELECT * FROM `names` WHERE `type` = 2 ORDER BY RAND() LIMIT 1 <--vykde 0.32s
Tai kodėl paieška su indeksu užtruko dvigubai ilgiau?
Profilis parodė, jog antroje užklausoje:
Copying to tmp table 0.295494
pirmoje šita reikšmė mažesnė tris kartus.
Kadangi šitas dalykas man labai svarbu, gal žinote būtų kaip suoptimizuoti?