赞
踩
在开发系统的时候,可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候大家可能会想,一条select count(*) from t 语句不就解决了吗?
但是,随着系统中记录数越来越多,这条语句执行得也会越来越慢。有些小伙伴可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。
那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现。如果应用中有这种频繁变更并需要统计表行数的需求,业务设计上可以怎么做。
首先要明确的是,在不同的MySQL引擎中,count(*)有不同的实现方式。
这里需要注意的是,我们在这篇文章里讨论的是没有过滤条件的count(*),如果加了where 条件的话,MyISAM表也是不能返回得这么快的。
在前面的文章中,我们一起分析了为什么要使用InnoDB,因为不论是在事务支持、并发能力还是在数据安全方面,InnoDB都优于MyISAM。如果小伙伴们的表也用了InnoDB,这就是当记录数越来越多的时候,计算一个表的总行数会越来越慢的原因。
那为什么InnoDB不跟MyISAM一样,也把数字存起来呢?
<Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。