php - mysql查询性能指标

标签 php mysql indexing

我的以下查询需要超过两分钟,但我不知道哪个索引最能提高性能:

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/

相关文章:

php - 使用 shell_exec() 执行 libreoffice 命令时出错

mysql - 如何解决 MySQL 错误字符串值错误?

mysql - 如果不同行中的值相同 mysql,则按其他列值对行进行排序

arrays - 不能在下标中使用索引

mysql - my.cnf 中的不同设置导致 "max key length is 1000 bytes"错误

php - 如何将 jQuery 函数应用于具有相似 ID 的 DOM 元素?

php - 在 MacOS 中升级到 PHP 7.2 版本

php - 如何添加/进入 preg_replace 模式

c# - 关于open Method(MySQL、Connector/Net)的 Action

sql-server - 在多列主键的第一列定义索引是否多余?