达梦数据库的count(*)操作是达梦数据库的一个独特特性,无论查询表的数据记录行数有多少,哪怕是亿级别的数据表,执行select count(*) 都能立即返回正确的结果。因为达梦数据库的count(*)操作不需要执行全表扫描,而只需要读取一个表行记录器。
达梦的实时count(*)的原理很简单,系统内部为每个基表维护了一个内部8字节的计数器,每插入一行就加1,删除一行就减一。需要查询记录数的时候,直接读取这个计数器的值,所以无论表数据库规模有多大,查询返回永远是毫秒级。
计数器的原理很简单,但是实现起来,还需要和数据库的事务系统机制匹配。一个事务在插入一行时,其可以看到count(*) 增加,但是在事务提交之前,其他事务是不能读取这个增加值。