使用 sum 和 group by 选项的 Mysql 查询运行速度非常慢
Posted
技术标签:
【中文标题】使用 sum 和 group by 选项的 Mysql 查询运行速度非常慢【英文标题】:Mysql query running very slow with sum and group by option 【发布时间】:2018-11-20 06:54:04 【问题描述】:mysql 查询运行很慢。 表中有 1000000 行。我在问题中添加了解释查询。这需要 10-11 秒。我有多个条件不断改变用户的输入。是否可以提供唯一索引。 解释查询 id -1 select_type -简单 表 - 卖家 类型 -ref 可能的键-季度,季度_2,comp_idx1,index_all,qc 关键 -qc key_len -32 参考 -const 行 -399782 额外 - 使用 where
SELECT `cm`,
`week`,
`quarter`,
SUM( `gmv`) as gmv,
SUM( `qty_sold`) as qty_sold,
SUM( `live_listing`) as live_listing ,
SUM( `txn`) as txn,
SUM( `new_listings`) as new_listings,
SUM( `ended_listings`) as ended_listings
FROM `sellers`
where quarter=:quarter and
category=:category
group by cm
CREATE TABLE `sellers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`seller_id` varchar(20) NOT NULL,
`am` varchar(30) NOT NULL,
`rm` varchar(30) NOT NULL,
`cm` varchar(30) NOT NULL,
`week` varchar(10) NOT NULL,
`quarter` varchar(10) NOT NULL,
`site` varchar(20) NOT NULL,
`category` varchar(20) NOT NULL,
`format` varchar(20) NOT NULL,
`price_band` varchar(20) NOT NULL,
`gmv` double(11,2) NOT NULL,
`qty_sold` int(11) NOT NULL,
`live_listing` int(11) NOT NULL,
`txn` int(11) NOT NULL,
`new_listings` int(11) NOT NULL,
`ended_listings` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `seller_id` (`seller_id`),
KEY `quarter` (`quarter`),
KEY `week` (`week`),
KEY `id` (`id`),
KEY `category` (`category`),
KEY `site` (`site`),
KEY `cm` (`cm`),
KEY `rm` (`rm`),
KEY `am` (`am`)
) ENGINE=InnoDB AUTO_INCREMENT=1692618 DEFAULT CHARSET=utf8
【问题讨论】:
“非常慢”的定义是什么?目前需要多少时间?此外,将EXPLAIN
语句结果添加到当前查询的问题中。
请通过编辑将这些详细信息添加到问题中。所有格式都在 cmets 中丢失,使其无法读取。
在 group byu 语句后使用 order by null
通常,您应该在 GROUP BY 中包含 SELECT 中的任何和所有非聚合列
@Strawberry 我没听懂。
【参考方案1】:
您可以为“cm”列添加索引。会比以前更快
【讨论】:
【参考方案2】:在特定查询中,MySQL 一次只能使用一个索引。在您的情况下,您有多个列要检查。您需要在(quarter, category, cm)
上添加一个综合索引,以获得更好的性能:
ALTER TABLE sellers
ADD INDEX comp_idx1(quarter, category, cm);
【讨论】:
如果我删除类别条件它会失败。我们有各种(5-6)个参数放在条件中。从过滤器中删除类别后,我又添加了一个索引。 ALTER TABLE 卖家添加索引 qc(季度,厘米)仍然无法正常工作。 @ManishMalviya “它不工作”是什么意思?请指定查询运行的持续时间?将EXPLAIN
语句结果添加到问题中,以便进一步分析。
解释sql结果。并查询需要 10 秒。 id - 1 select_type -SIMPLE table Sellers type ref possible_keys quarter,quarter_2,comp_idx1,index_all,qc key qc key_len 32 ref const rows 399782 Extra Using where
@dwir182 已添加。
我认为 sum 函数需要很多时间。以上是关于使用 sum 和 group by 选项的 Mysql 查询运行速度非常慢的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 条件 SUM 使用 GROUP BY 和 DISTINCT
使用带有 SUM 和 GROUP BY 的完整 JOIN 避免重复条目
SQL sum()后许多字段要group by不使用group by, 改用left join select 需要的字段。哪个方法好?速度快?