моему следующему запросу требуется больше двух минут, и я не знаю, какой индекс лучше всего повысить производительность:
SELECT COUNT(sid), COUNT(DISTINCT(cid)), shop
FROM forwarding
WHERE fDate BETWEEN '2011-06-01' AND '2011-06-30'
GROUP BY shop;
Объяснение результата:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sal_forwarding index forwardDate,forwardDate_2,forwardDate_3,forwardDate_4,forwardDate_5 f_shop 40 (NULL) 2448997 Using where; Using index
Ключ f_shop имеет следующую структуру: (f_shop, forwardDate, cid)
Какой индекс лучше всего повышает производительность моего запроса?
Большое спасибо.
UPDATE:
Вот таблица Создать заявление:
CREATE TABLE `forwarding` (
`sid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`f_shop` INT(11) NOT NULL,
`f_offer` INT(11) DEFAULT NULL,
`cid` CHAR(32) DEFAULT NULL,
`f_partner` VARCHAR(20) NOT NULL,
.
.
.
+8-10
.
.
.
`fDate` DATE NOT NULL,
PRIMARY KEY (`sid`),
KEY `f_shop` (`f_shop`,`fDate`,`cid`),
KEY `f_partner` (`f_partner`,`fDate`),
KEY `fDate` (`fDate`,`cid`),
KEY `fDate_2` (`fDate`,`f_shop`),
KEY `fDate_3` (`fDate`,`f_shop`,`f_partner`),
KEY `fDate_4` (`fDate`,`f_partner`,`cid`),
KEY `fDate_5` (`fDate`,`f_affiliateId`)
) ENGINE=INNODB AUTO_INCREMENT=10747233 DEFAULT CHARSET=latin1
На самом деле есть более 5 миллионов строк.