gpt4 book ai didi

mysql - mysql中与where条件一起使用优化group by

转载 作者:行者123 更新时间:2023-11-30 00:43:47 25 4
gpt4 key购买 nike

我有一个大约有 8M 行和 35 列的表(总体大小为 1G)。这用于涉及多级group by条件的报告。这是一个这样的查询。

explain select min(a), max(a), avg(a), sum(b) from test where (c=2 or c=20 or c=18 or c=21 or c=12) and d>='2013-01-01' and d <= '2013-12-01' group by c,e;

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 7
ref: NULL
rows: 154911
Extra: Using where; Using temporary; Using filesort
1 row in set (0.00 sec)

这大约需要 1.8 秒来执行。主键位于 c,d 上,并用于评估 where 子句。具有相同 where 条件且不带 group by 的 count(*) 查询返回大约 150000 行。所以实际查询中扫描的行也是可以的。但是,没有任何索引用于结果分组。我尝试将索引放在 cc,e 上。

我的问题是,一旦应用了条件且结果集位于 tmp 表中,是否可以使用另一个索引进行排序/分组。

我已经为tmp_table_size分配了足够的内存。因此,tmp 表肯定不会写入磁盘。该表使用 MyISAM

最佳答案

如果使用 (c, d , e , a , b) 建立索引,那么性能会更快。这将是一个覆盖索引,表扫描将不会像现在那样进行。

另外,我只是很好奇,您能给我一些有关您正在使用的 effective_month 功能的指导吗?

此外,一件重要的事情是索引大小。每个表的最大索引数和最大索引长度是按存储引擎定义的。您可以阅读更多相关信息here 。就您而言,这不会成为问题,因为您正在处理我假设的日期和数字。只是插入速度会慢一些。

关于mysql - mysql中与where条件一起使用优化group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com