
2 百多万条发帖记录,每条记录有自己的 postId 和对应的 UserId
统计用户的发帖总数 select count(postId) ... where UserId=xxx
一条执行下来要花 1.3 秒左右
内存和 cpu 占用 10%左右
win的服务器 昨晚计划任务跑了一晚上 才跑了1/5 总感觉有什么不对劲
1 php230 2016 年 5 月 10 日 大数据量用 count 确实比较耗时,但是你这才 200W 的量也不大啊 |
2 yangqi 2016 年 5 月 10 日 innodb 的话基本上正常 |
3 lxy 2016 年 5 月 10 日 我觉得你比我的快多了…… https://v2ex.com/t/264252 刚又试了一下: mysql> select count(comment_id) from comment; +-------------------+ | count(comment_id) | +-------------------+ | 3886472 | +-------------------+ 1 row in set (8.91 sec) |
4 mufeng 2016 年 5 月 10 日 加索引就快了 |
5 ipconfiger 2016 年 5 月 10 日 一般来说大多数数据库慢的情况去检查一下索引就行了 |
6 ytmsdy 2016 年 5 月 10 日 mysql> Select count(*) from bcwzall; +----------+ | count(*) | +----------+ | 4393300 | +----------+ 1 row in set (0.02 sec) |
7 otakustay 2016 年 5 月 10 日 via iPad count 和 avg row size 有关,所以单独弄个只有 id 列的表,你的 count 就会飞快 |
8 caixiexin 2016 年 5 月 10 日 via Android count(*)写法是不是更好? |
9 taozywu 2016 年 5 月 10 日 不建议 count(*),建议 count(1) |
11 heaton_nobu 2016 年 5 月 10 日 在 UserId 列上加索引 |
12 caixiexin 2016 年 5 月 10 日 via Android @wy315700 这个说法的出处?记得 count(*)和 count(1)在 MySQL 中是等价的。 count(列名) 还会忽略 null 行 |
14 david2016 2016 年 5 月 10 日 1 )该表的存储引擎是 MyISAM 还是 InnoDB MyISAM 表内部有表元数据的缓存, count(*)会比较快相对 InnoDB 表 2 )如果是 InnoDB 表 看下该表是否有辅助索引,如果有辅助索引的话, count(*)操作会走覆盖索引,走覆盖索引速度会比较快 可以 explain 查看一下 具体优化器怎么走的 |
15 alsotang 2016 年 6 月 6 日 晕。竟然没加索引 |