数据库表总数查询疑问:两条SQL语句结果不同的原因咨询
两条表计数SQL语句的差异分析
1. 统计范围完全不同
SELECT count(*) FROM INFORMATION_SCHEMA.TABLES会统计整个数据库实例下所有数据库的表,包括系统自带的库(比如MySQL的mysql、information_schema、performance_schema),以及你创建的所有业务库。show tables只统计你当前正在使用的数据库(即USE xxx指定的库)里的表,完全不会涉及其他库的内容。
2. 包含的表类型有区别
INFORMATION_SCHEMA.TABLES默认会把视图(TABLE_TYPE为VIEW的条目)、临时表、甚至数据库系统内部生成的辅助表都纳入计数。show tables默认只显示普通的物理基表,视图得用show full tables where Table_type = 'VIEW'才能看到,临时表也不会出现在结果里。
3. 隐性过滤条件的差异
如果在INFORMATION_SCHEMA.TABLES查询里没加TABLE_SCHEMA = DATABASE()的过滤条件,它就会遍历所有库的所有表;而show tables相当于自动加了这个过滤,只聚焦当前库。
举个实际场景:你当前切换到my_db库,show tables数的是my_db里的表,而INFORMATION_SCHEMA.TABLES的计数会包含mysql、information_schema、my_db等所有库的表总数,自然前者结果更大。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

