- 论坛徽章:
- 0
|
本帖最后由 qlks 于 2010-12-23 10:37 编辑
从逻辑角度上看,在oltp中count出来的结果都是不准确的,不管是InnoDB还是MyISAM
所以还有必要将这些操作 ...
qlks 发表于 2010-12-20 14:26
首先,我没有一味地说innodb的count(*)慢
现在讨论的情景是带where条件的count统计innodb和myisam的差异,myisam也不是任何操作都锁表吧
在 MySQL 3.23.7(在Windows上是3.23.25)以后,在 MyISAM 表中只要没有冲突的 Insert 操作,就可以无需使用锁表自由地并行执行 Insert 和 Select 语句。也就是说,可以在其它客户端正在读取 MyISAM 表记录的同时时插入新记录。如果数据文件的中间没有空余的磁盘块的话,就不会发生冲突了,因为这种情况下所有的新记录都会写在数据文件的末尾(当在表的中间做删除或者更新操作时,就可能导致空洞)。
而且对于这种count我并不需要它十分准确,比如innodb执行count操作并有where条件,那么innodb的锁机制会锁符合where条件的行,那么在count的过程中,对于新加的符合where条件的行,会计算进来还是不计算进来,
如果计算进来,确实会慢,如果不计算进来,应该还好啊.
所以我不赞成那种类似"innodb里尽量不要用count(*)"这种结论. |
|