V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
reaCodes
V2EX  ›  程序员

请问现在有同一个 MySQL 有相似的 30 个数据库,这 30 个数据库中都有相同结构的表 A,如何查询出这三十张相似的表 A 有无重复记录(主键重复)?

  •  
  •   reaCodes ·
    zhatlas · 2020-05-30 22:39:21 +08:00 · 2299 次点击
    这是一个创建于 1640 天前的主题,其中的信息可能已经有所发展或是发生改变。
    7 条回复    2020-05-31 11:11:25 +08:00
    sandrew1945
        1
    sandrew1945  
       2020-05-30 23:18:36 +08:00
    用 dbname.tablename 查 count(id),然后看有没有大于 1 的呗
    reaCodes
        2
    reaCodes  
    OP
       2020-05-30 23:20:19 +08:00
    @sandrew1945 我没明白,能不能详细点说一下,麻烦了
    sandrew1945
        3
    sandrew1945  
       2020-05-31 00:23:18 +08:00
    @reaCodes
    select t.id, count(t.id) from (
    select id from db1.a
    union all
    select id from db2.a
    .
    .
    .
    union all
    select id from db30.a
    ) t
    group by t.user_id
    reaCodes
        4
    reaCodes  
    OP
       2020-05-31 00:26:30 +08:00
    @sandrew1945 好的,感谢,明天我试试
    msg7086
        5
    msg7086  
       2020-05-31 03:45:00 +08:00
    甚至你把所有的 id 拿出来在程序里排查一下不就行了吗。
    yiyi11
        6
    yiyi11  
       2020-05-31 11:10:03 +08:00 via Android
    那得看数据量,如果数据量不大,采取 3l 的方法直接查。
    如果数据量大,但是预计一个表可以存下所有的 id,考虑 5l 的方法,考虑用一个临时表存放所有 id,用唯一索引来查。
    如果数据量还是巨大,一个表存放效率很低,考虑并行计算,重复 id 即至少 2 个表存在至少某条记录有交集。首先把 2 个表的唯一组合全列出来,然后把所有组合分发到 n 个服务自行计算,保证每个服务同时处理的数据量不超过 2 表(因为考虑到数据巨大),分发任务的时候还要注意错开一下,不要单个表同时被多个服务查,以免数据库压力过大。
    reaCodes
        7
    reaCodes  
    OP
       2020-05-31 11:11:25 +08:00
    @yiyi11 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.