mysql 四百万左右数据 count(*) 49 秒才响应,求助大佬怎么优化?

2021-07-30 11:35:10 +08:00
 edk24
EXPLAIN SELECT COUNT(*) AS tp_count FROM `fa_people_check` `people_check` LEFT JOIN `fa_people` `people` ON `people_check`.`people_id`=`people`.`id` LIMIT 1;

大佬们,像这种怎么优化字段提升查询速度。 执行一次 49s 就很离谱

10221 次点击
所在节点    MySQL
55 条回复
JJsty1e
2021-07-30 13:08:35 +08:00
晕,右表是主键啊,那可以去掉 left join
zoharSoul
2021-07-30 13:09:33 +08:00
不 count 返回个 99999 拉倒
est
2021-07-30 13:18:54 +08:00
百万级的表我觉得几十秒返回是正常的。。mysql 就这个水平。。。
micean
2021-07-30 13:20:47 +08:00
如果 fa_people 记录数小,可以分几步算出来
如果 fa_people 记录数大,fa_people_check 直接加字段吧
otakustay
2021-07-30 13:22:20 +08:00
不用 InnoDB 就好了
zhaokun
2021-07-30 13:29:02 +08:00
数据量小的表在前 join 其他表,可以稍微快一丢丢,join 能不要就不要了,查 count 不需要 json 吧
oueryini
2021-07-30 13:29:53 +08:00
换 MyISAM
bootvue
2021-07-30 13:30:06 +08:00
删掉 399 万
SjwNo1
2021-07-30 13:30:31 +08:00
上面的某几位仁兄简直在误导别人啊。。。
ruke
2021-07-30 13:37:45 +08:00
count 和索引没啥关系吧,索引是辅助查询的,count 是要对结果进行统计的
ruke
2021-07-30 13:38:45 +08:00
innodb 的话 count 本身就是扫描, 就算不加条件 count 一样慢
0o0o0o0
2021-07-30 13:43:32 +08:00
@edk24 去掉分区之后有索引也这么慢吗?
robinlovemaggie
2021-07-30 13:46:39 +08:00
@est #23 如你所说,那 mysql 就是 shit 级数据库了
Valid
2021-07-30 13:56:46 +08:00
我 250 万的数据 count(*)用时 (0.876 秒)
0o0o0o0
2021-07-30 13:58:04 +08:00
@ruke 好像如果是辅助索引的话就不需要全表扫描了,不过这里有 left join 用索引可以加速的吧。。。
sunjiayao
2021-07-30 14:12:06 +08:00
做几个测试
1. 去掉 join
2. 去掉分区
3. left join 改成 right
然后抛下测试结果
nuistzhou
2021-07-30 14:14:51 +08:00
看看两个表的 id 有没有加索引吧
chenyi
2021-07-30 14:29:52 +08:00
people 表就一行,还是用的 left join,这个 left join 可以去掉

还有那些问有没有索引的,自己看看 explain 结果呀
ifconfig
2021-07-30 14:39:16 +08:00
很疑惑,既然没有加 where 条件,为什么要 join ?
realpg
2021-07-30 14:56:46 +08:00
抛开 49 秒的问题,你这 SQL 应该回炉了

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

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

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

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

© 2021 V2EX