MySQL 单表三千万条数据,怎么优化 count 查询?

2020-09-29 10:38:41 +08:00
 CodeXx

innodb,20 来个字段,每天有几十万条数据插入,在不做分表的情况下,怎么优化查询?现在是 count 查询很慢,5s 左右,带上查询条件比如近一个月就更慢了 10 多 s

6061 次点击
所在节点    数据库
46 条回复
juntao
2020-09-29 13:10:53 +08:00
最近有遇到,多字段 WHERE 查询,1kw 条不到,不想分表
1 做好索引。可以用 EXPLAIN 来帮助优化。 -- 有一定效果
2 限制查询的时间范围 -- 特别有效
3 异构,mysql,redis 、elasticsearch 等等单独统计数据, 因为 2 能够满足我们的需求,所以没采用。


@liuzhaowei55 直接获取自增 id 也是一种方法诶。之前没考虑,需要匹配场景。
fuyufjh
2020-09-29 13:12:19 +08:00
mysql 8.0 有 parallel query,能大幅提升这个场景
zakokun
2020-09-29 13:13:58 +08:00
1. 索引对 count 有用
2. 几千万的表 count 需求来自哪里?为何要每天 count
3. 维护一个 count 表,插入数据的时候更新 count 表
4. ES
hooopo
2020-09-29 13:17:26 +08:00
j747677392
2020-09-29 13:51:42 +08:00
如果都是日志型的数据(用于分析,没删改的话) 可以用 hdfs+imapla,支持 sql,几亿数据查询毫秒吧
wangyzj
2020-09-29 14:02:04 +08:00
count 和索引没关系
es 是个选项
或者单独做个统计信息表
或者用 redis 来分页
CodeXx
2020-09-29 14:18:20 +08:00
@RickyC
@maigebaoer
@v2orz
@Leigg
@RangerWolf
这样只能存总的 count 吧,查询有其他条件的更慢,14 楼这种差不多
CodeXx
2020-09-29 14:19:31 +08:00
@haohappy select 很快
cokolin
2020-09-29 14:29:22 +08:00
能否首先描述一下为何要 count,例如页面查询需要总量,还是什么需要
cokolin
2020-09-29 14:33:45 +08:00
还有查询用到的字段是否是固定的,如果的固定的话,是否可以增加索引,看看 EXPLAIN 分析用到的索引是否正确
另外也可以用一些业务的方式避免分页查询总量的
xsm1890
2020-09-29 14:42:26 +08:00
myisam 自动维护总数,count 的过程不用计算只需要度数即可
raysmond
2020-09-29 14:45:16 +08:00
如果只是 count,且对实时性要求那么高(能接受 10s ?),有个很简单的做法能大幅提高速度
用一个线程异步 count 就好,用的地方直接从内存取,对使用方来说超级快
fangcan
2020-09-29 14:49:17 +08:00
不要求精确的话 用 explain
Evilk
2020-09-29 15:20:39 +08:00
如果是分页用的 count,如果数据量太大,我一般给个模糊值
每隔段时间,更新一次,即可
liwl
2020-09-29 15:21:35 +08:00
是想弄图表吧 每天 count
rickiey
2020-09-29 16:27:40 +08:00
mongoDB shared cluster 不行吗? 我没用过
lshero
2020-09-29 16:29:48 +08:00
OLAP 的功能交给别的数据库做吧
mofeishiwo
2020-09-29 16:32:34 +08:00
megatron7
2020-09-29 17:06:00 +08:00
没有数据断层吧并且有自增主键索引可以用:
select max(id) from table;
bbao
2020-09-29 17:07:23 +08:00
@CodeXx mysql 是行锁,是否全表需要看你后面 where 条件。

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

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

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

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

© 2021 V2EX