nnodb引擎的表在使用selectcount的时候,如果表的总行数在1-2万条以内, 速度应该不是瓶颈,但是一旦超过了这个值, 随着行数的增多,selectcount查询效率会迅速的下降。
测试表大约4.3万行 Myisam引擎: SELECTSQL_NO_CACHECOUNT(*)FROM`roundmember2` 耗费105微秒 innodb引擎: 耗费10335微秒 可以看出innodb引擎耗时是myisam引擎的98倍!
这还是仅仅是4万多行的数据下测试的差距,随着记录行的增加,这个差距会越来越大。
MyISAM会保存表的总行数, 这段代码在MyISAM存储引擎中执行, MyISAM只要简单地读出保存好的行数即可。
因此,如果表中没有使用事务之类的操作,这是最好的优化方案。
然而,innodb表不像myisam有个内置的计数器, InnoDB存储引擎不会保存表的具体行数,因此, 在InnoDB存储引擎中执行这段代码,InnoDB要扫描一遍整个表来计算有多少行。