
1 aliipay 2016-03-17 19:58:05 +08:00 查询语句?索引?啥都不说怎么看 |
2 wy315700 2016-03-17 20:02:36 +08:00 不要用 count(*) 不要用 count(*) 不要用 count(*) |
3 hxsf 2016-03-17 20:13:26 +08:00 via Android count(主键) |
4 huiyue 2016-03-17 20:14:23 +08:00 没有索引?用 count(id) |
5 ipconfiger 2016-03-17 20:31:40 +08:00 count 怎么都快不起来的, 特别是不加条件全表 count, 我说的 innodb 要么就专门拿个表来做计数器 |
6 SparkMan 2016-03-17 20:50:40 +08:00 innodb 的 count 需要全表扫描, myisam 直接读 count 值所以快,但是你有主键索引,不应该这么慢 |
7 chac88 2016-03-17 20:53:17 +08:00 via iPhone count 主键 /索引看看, 阿里云机械盘 io 不好出了名的,不知道是不是故意的为了推销 rds |
8 devinww 2016-03-17 21:00:41 +08:00 不要 count(*),count(1) 也好。 |
9 cyberdak 2016-03-17 21:12:46 +08:00 为何楼上群众们的说法。。和我之前在高性能 mysql 上面看的完全冲突? 书中是提倡使用 count(*)的 |
10 3dwelcome 2016-03-17 21:24:32 +08:00 via Android 书上是 myisam 吧。 |
11 3dwelcome 2016-03-17 21:26:23 +08:00 via Android 瓶颈在磁盘 io 可能性最大。 |
12 cyberdak 2016-03-17 21:40:02 +08:00 myisam 就可以直接通过引擎的特性得到没有 where 条件的 count(*)结果了。。 |
13 yangqi 2016-03-17 21:46:41 +08:00 innodb 就这样,每次查询行数都要经过以下步骤,肯定慢,不像 myisam 直接有行数值 * ib_logfile0/ib_logfile1 (Redo Logs) * ibdata1 ** Undo Logs ** Rollbacks ** Data Dictionary Changes * Buffer Pool Management * Transaction Isolation (4 types) ** Repeatable Reads ** Read Committed ** Read Uncommitted ** Serializable |
14 allenhu 2016-03-18 08:32:37 +08:00 via Android 时代不同了, count (*)没有问题 如果可以,换 myisam 吧 |
15 cyberdak 2016-03-18 09:36:40 +08:00 昨天等不到楼主 也等不到楼上其他的回复 然后就自己去插入了一份测试数据。。 191w 表数据的 innodb,六个字段,一个自增 int id ,其他五个 varchar 200 ,然后当前时间填充,都是 not null 实测就是不管 count(*),count(id),count(1) 的耗时都是一样的 测试的环境是 mysql 5.5 |
18 CosWind 2016-03-18 17:09:21 +08:00 mysql 现在没那么傻了, count(*)对它来说最好优化 |
19 likuku 2016-03-25 14:53:53 +08:00 让 InnoDB 的全表扫描快 10 倍 - 技术翻译 - 开源中国社区 : http://www.oschina.net/translate/making-full-table-scan-10x-faster-in-innodb?print |
20 likuku 2016-03-25 15:08:07 +08:00 2013 年 9 月,我自己在同一台机器(自有物理机) 上分次进行独占本地测试: count(*) 扫全表的话, postgresql 要比 InnoDB 快 7 倍。 巴特, myisam 还是最快的。 用的测试范例,很简单的表结构( 1841495 行),主键索引,日期有索引: InnoDB: mysql> select count(*) from status; +----------+ | count(*) | +----------+ | 1841495 | +----------+ 1 row in set (3.53 sec) MyISAM: mysql> select count(*) from status; +----------+ | count(*) | +----------+ | 1841495 | +----------+ 1 row in set (0.00 sec) PostgreSQL: postgres=# select count(*) from status; count --------- 1841495 (1 row) Time: 516.717 ms |