gbase8a中根据提供的表名统计表中现有的行数

根据提供的表名格式如下

table1
table2
生成如下格式的信息
aa.test_100:bb.test_100:9463294
格式说明:aa代表源数据库,test_100源数据库中的表,bb代表目标数据库,test_100目标数据库中的表,9463294代表行数

实现脚本脚本

select concat(‘select concat(concat(’’’,‘aaa.’,table_name,’’,’:’,‘in_bbb_aaa.’,table_name,’:’,’’’) ,count(rowid)) from ‘,table_name,’ union all’) FROM information_schema.TABLES m where m.TABLE_SCHEMA=‘test’;

执行生成的脚本

select concat(concat(‘aaa.info_config:in_bbb_aaa.info_config:’) ,count(rowid)) from info_config union all
select concat(concat(‘aaa.m_page_view_log:in_bbb_aaa.m_page_view_log:’) ,count(rowid)) from m_page_view_log union all
select concat(concat(‘aaa.sync_table:in_bbb_aaa.sync_table:’) ,count(rowid)) from sync_table union all
select concat(concat(‘aaa.test:in_bbb_aaa.test:’) ,count(rowid)) from test union all
select concat(concat(‘aaa.test1:in_bbb_aaa.test1:’) ,count(rowid)) from test1 union all
select concat(concat(‘aaa.test_100:in_bbb_aaa.test_100:’) ,count(rowid)) from test_100 union all
上面语句中最后一行语句中union all关键字需要去掉。

生成结果如下

aaa.info_config:in_bbb_aaa.info_config:0
aaa.m_page_view_log:in_bbb_aaa.m_page_view_log:0
aaa.sync_table:in_bbb_aaa.sync_table:7
aaa.test:in_bbb_aaa.test:5
aaa.test1:in_bbb_aaa.test1:2
aaa.test_100:in_bbb_aaa.test_100:9463294

说明:

gbase8a 8.6.2.15-R1-dev.99722这个版本查询上亿表的时,通过查询最大rowid来确定记录数不准确,发现现象如下
1、有一个刚过亿的表,但查询最大rowid确只有2千多万,本来是想通过rowid来切片同步数据的,看来还有些问题,有个30多亿的大表,对应的最大rowid也只有3亿多。
select count() from aa
select count(rowid) from aa
select count(
) from aa where rowid>=0 and rowid<= 最大rowid
上面三条语句查询的结果是一致的
疑问:
1、rowid是随表插入记录时,自动增长的,启始值为0,最大值理论上是表记录总数-1,但这里相差确是10倍
2、通过where rowid>=0 and rowid<= 最大rowid查询统计的记录又是对的,rowid里有重复值?

3、通过COUNT(*)会快很多,原因可能是表记录总数存在磁盘上。

补充:

1 aaa.h_data:in_bbb_aaa.h_data:0 aaa.h_data:in_bbb_aaa.h_data:0

格式说明:1代表中最大rowid值 ,aaa代表源数据库,h_data源数据库中的表,bbb代表目标数据库,h_data目标数据库中的表,0代表通过count(rowid)统计出来的行数,最后一个0代表count(*)统计出来的行数

select concat(‘select concat(’’’,‘aaa.’,table_name,’’,’:’,‘in_bbb_aaa.’,table_name,’:’,’’’,max(rowid)) as max_rowid,concat(’’’,‘aaa.’,table_name,’’,’:’,‘in_bbb_aaa.’,table_name,’:’,’’’,count(rowid)) as total_rowid ,concat(’’’,‘aaa.’,table_name,’’,’:’,‘in_bbb_aaa.’,table_name,’:’,’’’ ,count(*) ) as total_num from ‘,table_name,’ union all’)
FROM information_schema.TABLES m where m.TABLE_SCHEMA=‘test’ and table_name in(’’,’’)

and table_name in(’’,’’)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值