大佬们, mysql 五百万以上的 join left 关联查询统计很慢 怎么操作

2021-06-11 10:37:45 +08:00
 edk24

索引已经加了,a 表 people_id 关联 b 表 id, 然后条件是 b 表的某一个字段==1,然后 count(*)

下面是 php 伪代码

$people_ids = Db::name('people_check')->where('admin_id',$value['id'])->column('people_id');
$people1 = Db::name("people")->where('id','in',$people_ids)->where('id_dailu',1)->count();  # 全部检测人数
                

admin_id 加了索引,id_dailu 加了索引。 没有全表扫描

原先写法是 join left,这个是改过的, 这个更慢。 求大佬分析一波

4970 次点击
所在节点    MySQL
26 条回复
young
2021-06-11 18:06:08 +08:00
@codespots #4 99% thinkphp

id_dailu 估计走全表了
raaaaaar
2021-06-11 18:08:30 +08:00
SQL,explain 发出来看看
ibx
2021-06-11 18:37:34 +08:00
@codespots 伟大的 thinkphp 框架。
zhuzhibin
2021-06-11 19:27:02 +08:00
join 数据大 一定会慢吧
JJstyle
2021-06-11 20:18:39 +08:00
总的原因在于 in 的 id 太多了,加了索引也没用,提供一个思路:将 ids 排序后按照数量 chunk,比如 50 万一个 chunk,然后每个 chunk 一个异步查询,最终结果求和。
xuanbg
2021-06-11 21:45:32 +08:00
@wangxin13g 还有 null 不能索引也一样。。。都是以讹传讹,用旧地图轰炸新目标。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/782830

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX