SELECT COUNT(*)超级慢,讨论一下解决方案

2018-05-14 13:35:02 +08:00
 Aluhao

使用场景: 1、回复表 1 亿多数据,每天增长 1 万+; 2、发回复的时候得统计回复用户回复数量;

使用的语句:SELECT COUNT(*) FROM answer WHERE uid='10' 查询结果:6963911 使用时间:101.618 秒 其中 uid 已经索引,也用过其它 COUNT(其它列字段) 查询一样很慢; 如果用 aid 已经索引,aid='10' 查出结果数量少,查询很快;

还能通过优化 SQL 语句来优化吗,如果不行,只能通过 insert +1 及 delete -1 来解决了。

19507 次点击
所在节点    MySQL
67 条回复
kavana
2018-05-15 08:38:03 +08:00
收藏 count*处理办法
agostop
2018-05-15 08:54:42 +08:00
最懒的办法,就是你先手动 count,然后再做个触发器,incr 和 decr
VoidChen
2018-05-15 09:19:59 +08:00
@elarity 好的,我去学习下
Aluhao
2018-05-15 09:49:44 +08:00
Aluhao
2018-05-15 09:55:04 +08:00
@defclass 这个 UID 肯定是 int 了,存放用户 ID 的不可能用 string,默认都不为 null
defclass
2018-05-15 10:04:21 +08:00
@Aluhao 可以看 explain 先看看. 我之前遇到的一个坑是, 类型写错了, 无法使用到索引. 如果是 Int , sql 应该是 `uid= 10` ?
checgg
2018-05-15 10:20:41 +08:00
目前怀疑是 myisam 表锁的问题。
建议把数据库 copy 到本地,在没有写和更新的情况下查询一下。
Reign
2018-05-15 10:56:01 +08:00
话说, https://www.v2ex.com/t/433836 ,每天回复增长 1 万+的理财论坛,居然还没钱只能用 SELECT COUNT(*), 你咋不专门雇个员工一行一行的去数呢?
eslizn
2018-05-15 10:59:43 +08:00
@af463419014 实际经验,少用分区表。线上 ddl 是噩梦
reus
2018-05-15 11:00:18 +08:00
内存不够。
Aluhao
2018-05-15 11:49:03 +08:00
@defclass
没法上传图片;
WHERE `uid`='10' 和 WHERE uid='10' 差别不大;
defclass
2018-05-15 12:21:35 +08:00
我的意思是 10 不要引号
plko345
2018-05-15 12:29:40 +08:00
@VoidChen 请问测试时用什么工具,数据是模拟的吗?
IceBay
2018-05-15 12:38:07 +08:00
@scnace #35 请问书名是什么。
darklowly
2018-05-15 12:42:11 +08:00
这类表一般是插入后不怎么修改,

1 分表
2 新建统计表

可以用通过触发器,在插入的时候触发一下更新统计表
crist
2018-05-15 14:07:19 +08:00
SELECT COUNT (. 人 .)
colincat
2018-05-15 14:18:59 +08:00
个人经验是需要单独创建一个表存数量,然后累加即可,这个也不要特别精准
shiny
2018-05-15 14:24:47 +08:00
MySQL 是跑在 SSD 上吗
Wysten
2018-05-15 14:31:42 +08:00
前几天刚遇到类似的问题,单表 500W 数据,count(*) 和 count(id) 都很慢。最后用了 Redis Incr,先 count 一次,存入 redis,以后就直接在 redis 加 1 了 。
scnace
2018-05-15 16:21:31 +08:00
@IceBay 高性能 MySQL

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

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

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

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

© 2021 V2EX