首页 新闻 会员 周边

mysql count(*)关联多表怎么优化

0
悬赏园豆:15 [已解决问题] 解决于 2023-04-12 18:10

我的MySQL查询count()from( 括号里有七八个left join ),导致我的查询速度特别慢,索引也添加了,创建视图也试了,速度还是没有提升,这种情况应该怎么优化呀?
备注:count(
) from结果需要10s左右
但是去掉外面的count(*),里面的七八个left join查询需要2s左右

Monster1728的主页 Monster1728 | 初学一级 | 园豆:173
提问于:2023-04-11 17:25
< >
分享
最佳答案
0

使用 Redis 缓存:对于简单的 count(),比如统计浏览总次数或者浏览总人数,可以将接口使用 Redis 缓存起来,每次从缓存中获取最新的数据。这样可以避免实时统计数据的性能问题,同时也可以减少数据库的负载。
加入二级缓存:对于有些业务场景,可以将 count(
) 的结果缓存到 Redis 中,然后再从 Redis 中查询结果。这样可以提高查询效率,减少数据库的负载。
使用 MySQL 引擎的优化:在不同的 MySQL 引擎中,count() 的实现方式可能不同。对于 InnoDB 引擎,需要将数据一行一行地从引擎中读出来,然后累积计数。因此,可以通过优化 InnoDB 引擎的索引来减少 count() 的执行时间。
使用 MySQL 的 EXPLAIN 语句:EXPLAIN 语句可以帮助查看 MySQL 数据库中的查询计划,从而发现性能瓶颈。通过分析 EXPLAIN 语句,可以找到性能瓶颈所在的表和查询,并进行优化。

收获园豆:5
国产小品牌 | 初学一级 |园豆:199 | 2023-04-12 16:25
其他回答(4)
0

建议通过执行计划看一下究竟慢在哪个环节?

收获园豆:1
dudu | 园豆:30994 (高人七级) | 2023-04-11 17:28


您好,这里我还看不太懂,您能帮我看看是慢在哪里了吗?谢谢

支持(0) 反对(0) Monster1728 | 园豆:173 (初学一级) | 2023-04-11 17:44
0
收获园豆:2
ycyzharry | 园豆:25653 (高人七级) | 2023-04-11 18:00
0

针对这种情况,以下是一些可能的优化措施:

检查查询语句中是否有不必要的left join,如果有可以尝试移除或者替换成更适合的连接方式。

尝试使用子查询代替left join,将查询结果缩小到最小的数据集合,以减少查询的复杂性和计算量。

确认是否有正确的索引存在,以确保查询优化器可以使用它们来加速查询。您可以尝试使用EXPLAIN命令来检查查询执行计划并查看哪些索引正在使用。

将查询结果缓存起来,以便在后续查询时可以快速访问。您可以使用MySQL的缓存功能或者自己实现缓存机制。

调整MySQL服务器的参数设置以提高查询性能,例如增加缓冲区大小,调整连接数和查询缓存设置等。

分析查询性能瓶颈,可以使用一些性能分析工具来检查查询中哪些部分消耗时间较多,并根据分析结果进行优化。

优化数据模型,通过重新设计数据库模式,以最小化关联表和查询的数据量,以及使用合适的数据类型和索引来提高查询性能。

请注意,在进行任何优化之前,建议您备份数据库,以便在出现问题时可以恢复数据。

收获园豆:4
Technologyforgood | 园豆:5633 (大侠五级) | 2023-04-11 20:30
0

列太多也会慢,用count(1)稍微好点;
还用了distinct?那更慢了

收获园豆:3
LiveCoding | 园豆:497 (菜鸟二级) | 2023-04-12 08:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册