我的以下查询需要超过两分钟,但我不知道哪个索引最能提高性能:
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)
提高查询性能的最佳索引是什么?
非常感谢。
更新: 这是表创建语句:
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
实际上有超过 500 万行。
最佳答案
您需要一个复合索引
ALTER TABLE forwarding ADD INDEX shopdate (shop, fDate)
关于php - mysql查询性能指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847601/