Rafał
Plewa
Manager IT,
Tourmedica.pl Sp. z
o.o.
Temat: Optymalizacja zapytania z GROUP BY i ORDER BY
Witam,Mam pewną zagwozdkę nad którą męczę się już kilka dni. Jeśli macie jakiś pomysł byłbym wdzięćzny. Chodzi o optymalizację zapytania, które grupuje i sortuje wyniki. Oto jak wygląda sytuacja:
Jest jedna, prosta tabela `searcher` zbudowana na potrzeby szybkiej wyszukiwarki. Tabela zawiera ponad 2 miliony rekordów:
CREATE TABLE `searcher` (
`idsearcher` int(10) unsigned NOT NULL AUTO_INCREMENT,
`offer_id` int(10) unsigned NOT NULL DEFAULT '0',
`price` decimal(8,2) NOT NULL,
PRIMARY KEY (`idsearcher`),
KEY `offer_id` (`offer_id`),
KEY `price` (`price`),
KEY `offer_price` (`offer_id`,`price`)
) ENGINE=InnoDB;
Wszystkie zapytania jakie testuję działają bardzo szybko, w granicach do 0.2 sekund. Zwykłe zapytanie grupujące oferty działa błyskawicznie (korzysta z indeksu):
SELECT SQL_NO_CACHE offer_id, MIN(price) as cena_od, count(offer_id) as ilosc_terminow FROM searcher
GROUP BY offer_id
LIMIT 10
(0,005 sekundy)
Problem zaczyna się, gdy próbuję posortować wyniki po najniższej cenie w danej ofercie:
SELECT SQL_NO_CACHE offer_id, MIN(price) as cena_od, count(offer_id) as ilosc_terminow FROM searcher
GROUP BY offer_id
ORDER BY cena_od
LIMIT 10
(6,57 sekund)
Tu jak widać sytuacja pogarsza się radykalnie - prawie 7 sekund, czas niestety w moim przypadku nie do przyjęcia.
Macie jakieś pomysły?