Ostatnio mam problem z pewnym serwisem o dużej ilości krotek w bazie. Dużo czasu zajmuje sortowanie wyników według nazw.
I tutaj postanowiłem założyć 2 indexy na pole "nazwa" sortując je jako ASC oraz DESC.
Kod SQL:
CREATE TABLE IF NOT EXISTS `produkty` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `nazwa` varchar(200) NOT NULL, `cena_min` decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00', `cena_max` decimal(10,2) NOT NULL DEFAULT '0.00', `wszystkich_ofert` smallint(5) UNSIGNED NOT NULL DEFAULT '1', `data_dodania` datetime NOT NULL, PRIMARY KEY (`id`), KEY `nazwa asc` (`nazwa`) USING BTREE, KEY `nazwa desc` (`nazwa`) USING BTREE, KEY `oferty asc` (`wszystkich_ofert`), KEY `oferty desc` (`wszystkich_ofert`), KEY `cena asc` (`cena_min`), KEY `cena desc` (`cena_min`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Czy takie rozwiązanie jest dobre zakładanie 2 indexów na to samo pole ? I czy w ogóle to ma jakiś sens ?