› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
nnnneymarjr
V2EX  ›  MySQL

面试时被问到的一个问题

  •  
  •   nnnneymarjr · Sep 26, 2022 · 5414 views
    This topic created in 1460 days ago, the information mentioned may be changed or developed.
    有两张比较大的表,如何判断两张表中是否有相同的数据,以及如何将他们找出来?
    请问大家有什么思路吗?
    14 replies  •  2022-09-27 16:00:34 +08:00
    GlobalNPC
        1
    GlobalNPC  
       Sep 26, 2022
    如果只是 SQL 的话,这样?
    select a. * from a join b on al=b1 and a2=b2 and a3=b3 ...;
    Jooooooooo
        2
    Jooooooooo  
       Sep 26, 2022
    如果只需要看有没有的话

    考虑下布隆过滤器
    F281M6Dh8DXpD1g2
        3
    F281M6Dh8DXpD1g2  
       Sep 27, 2022 via iPhone
    union all 之后 group by 全字段 having count > 1
    nnnneymarjr
        4
    nnnneymarjr  
    OP
       Sep 27, 2022
    @infun 我当时就是这么说的,面试官也没给反馈,感觉跟他心中的答案差的挺远的😥
    mazhan465
        5
    mazhan465  
       Sep 27, 2022   ❤️ 1
    每条字段计算一遍 MD5 摘要保存到文件,然后排序,双指针比较,MD5 相同的加载对应行的数据进行验证比较
    allforone
        6
    allforone  
       Sep 27, 2022
    可能问的是 inner join 的具体实现?先确认一下是算法题还是 sql 题。算法题的话可能想考 sort merge join 或者 hash join 一些优化实现。
    dog82
        7
    dog82  
       Sep 27, 2022
    5 楼的思路很不错
    lookStupiToForce
        8
    lookStupiToForce  
       Sep 27, 2022
    以 pgsql 为例,每行数据 hash 一下加上主键(单一主键或者联合主键都行)后再比较最好
    如果下面的 sql 一次跑不出来,先分别生成两张表然后用那两张新表去做最后的 join 比对

    with t1 as(
    select f.primary_key,
    md5(CAST((f.*) AS text)) as hash
    from foo1 f
    )
    , t2 as(
    select f.primary_key,
    md5(CAST((f.*) AS text)) as hash
    from foo2 f
    )
    select t1.primary_key
    from t1 join t2 using (primary_key)
    where t1.hash = t2.hash
    agmtopy
        9
    agmtopy  
       Sep 27, 2022
    猜?先比较索引字段,在比较其他?
    nnnneymarjr
        10
    nnnneymarjr  
    OP
       Sep 27, 2022
    @mazhan465 是一个不错的思路
    nnnneymarjr
        11
    nnnneymarjr  
    OP
       Sep 27, 2022
    @allforone 应该像是场景题
    tobias7
        12
    tobias7  
       Sep 27, 2022
    @mazhan465 能否细说说
    copper20
        13
    copper20  
       Sep 27, 2022
    允许假阳性存在的话可以考虑布隆过滤器,线性时间能应该就能搞定了

    *如果不是一道 SQL 题的话
    zovencraig
        14
    zovencraig  
       Sep 27, 2022
    首先是“比较大的表”,这个是坑,你要先反问并确认多少数据量以及使用的数据库,才能决定采用的方法;其次,就是看你面试的职位,是偏技术开发还是数据方面,再挑适合的实现方法。当然不排除面试官问的很随意……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2748 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: f77a3b4c · 48ms · UTC 13:29 · PVG 21:29 · LAX 06:29 · JFK 09:29
    ♥ Do have faith in what you're doing.