不同用户查询同一张表count(*)结果不一致的原因排查
不同用户查同表
count(*)结果不同的原因 当两个不同用户执行:
select count(*) from my_table;
得到不同的非零结果,结合表的权限配置信息(原信息显示该表对不同用户有差异化权限设置),可能的原因有这些:
- 行级数据权限限制:数据库给不同用户设置了行级过滤规则,比如有的用户只能查看特定状态、特定归属的数据行,看不到全表数据,统计出来的行数自然不一样。
- 表访问范围差异:如果表是分区表,其中一个用户仅能访问部分分区;或是用户权限被限定只能查询特定数据子集,能访问到的行数少于另一个用户。
- 临时表混淆:其中一个用户在当前会话中创建了同名临时表
my_table,此时执行查询实际访问的是临时表而非原表,临时表的数据量和原表不同,导致结果有差异。 - 事务快照差异:如果使用支持MVCC的引擎(比如InnoDB),两个用户的事务隔离级别不同,或是其中一个存在未提交的事务,会看到不同版本的数据快照,统计行数因此不同——不过这种情况通常是临时的,事务提交或隔离级别调整后结果会一致。
- 同名表指向不同:不同用户的数据库环境中,
my_table可能是不同实际表的别名/同义词,比如一个用户访问生产库的表,另一个访问测试库的同名表,结果必然不同。
内容的提问来源于stack exchange,提问作者David Oneill
相关产品推荐
相关产品推荐

