mysql - 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;
解决方案
推荐阅读
- python - 由于“未加载库”错误,jupyter notebook 无法启动
- c# - 如何从 C# 8 switch 表达式返回到一个属性和两个本地声明的变量?
- charts - 堆栈栏谷歌可视化
- jackson - 使用 JTS jackson 时更改 lat long 的轴
- php - PHP 友好 URL .htaccess 允许无限 URL
- ubuntu - 无法在 VirtualBox 上启动 Ubuntu18.04 [VERR_NEM_VM_CREATE_FAILED]
- c# - 如何优化 switch 语句中的 if 语句
- android - 使用 Flutter 从 Android 上的原生编译共享库调用函数
- python - 你如何计算python中正态分布的线性变换的cdf?
- excel - 计算单元格的平均值计算