SELECT cc,group_concat(ROUND(`success`/(`success`+`error`)*100,1)) as su,group_concat(ROUND(`error`/(`success`+`error`)*100,1)) as er,group_concat(ROUND((`success`+`error`)/(`success`+`error`)*100,1)) as con FROM callapp_log GROUP BY `cc` ORDER by `time` 优化
时间: 2023-07-20 21:31:23 浏览: 124
如何修改Mysql中group_concat的长度限制
在优化查询之前,需要先确定 `callapp_log` 表中的索引情况,建议在 `cc`、`success`、`error` 字段上各建一个索引。
接下来,可以尝试对该查询进行优化,以下是可能的优化方案:
1. 使用 `EXPLAIN` 命令查看该查询的执行计划,分析查询语句中是否有全表扫描或者临时表的创建,以及是否有可能使用索引。
2. 在 `group_concat` 函数中使用 `DISTINCT` 关键字,避免出现重复数据。
3. 将 `ROUND` 函数的计算移到查询结果中,减少计算量。例如:
```sql
SELECT cc, group_concat(su) AS su, group_concat(er) AS er, group_concat(con) AS con
FROM (
SELECT
`cc`,
CONCAT(ROUND(`success`/(`success`+`error`)*100, 1), '%') as su,
CONCAT(ROUND(`error`/(`success`+`error`)*100, 1), '%') as er,
CONCAT(ROUND((`success`+`error`)/(`success`+`error`)*100, 1), '%') as con
FROM `callapp_log`
GROUP BY `cc`
) t
ORDER BY `time`
```
4. 如果数据量较大,可以考虑分库分表、横向拆分等优化手段,将数据分散到多个库或表中,提高查询性能。
需要注意的是,以上优化方案并不一定适用于所有情况,具体还需要结合实际情况进行调整。
阅读全文