首页 > 解决方案 > MYSQL - 即使使用 iINDEX,SUM 也会扫描所有表

问题描述

我对 SUM 查询有疑问,如下所示:

SELECT SUM(Clicks) FROM tracker USE INDEX (CampaignID) WHERE CampaignID = $CampaignID AND (Date BETWEEN '$date_from' AND '$date_to')

我为 CampaignID 和 Date 创建了一个索引。

我用 EXPLAIN 来分析这个查询在做什么。这是我得到的结果。

[0] => 1
[1] => SIMPLE
[2] => tracker
[3] => 
[4] => ALL
[5] => CampaignID_index,Date_index
[6] => 
[7] => 
[8] => 
[9] => 167607
[10] => 5.00
[11] => Using where

167607 是表行大小。因此,即使特定查询实际上少于 100 行,查询似乎也在扫描所有表。

我试图强制使用正确的 INDEX,但结果是一样的。我是 MySQL 的初学者。关于如何提高查询速度的任何想法?

编辑:这是我的创建表。

CREATE TABLE `tracker` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `CampaignID` varchar(50) DEFAULT NULL,
  `Date` date DEFAULT NULL,
  `Clicks` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `CampaignID_index` (`CampaignID`),
  KEY `Date_index` (`Date`)
) ENGINE=InnoDB AUTO_INCREMENT=169968 DEFAULT CHARSET=latin1;

标签: mysqlsumexplain

解决方案


推荐阅读