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

    考虑下布隆过滤器
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 27, 2022 via iPhone
    3
    union all 之后 group by 全字段 having count > 1
    nnnneymarjr
    nnnneymarjr
    OP
    Sep 27, 2022
    4
    @infun 我当时就是这么说的,面试官也没给反馈,感觉跟他心中的答案差的挺远的😥
    mazhan465
    mazhan465
    Sep 27, 2022❤️1
    5
    每条字段计算一遍 MD5 摘要保存到文件,然后排序,双指针比较,MD5 相同的加载对应行的数据进行验证比较
    allforone
    allforone
    Sep 27, 2022
    6
    可能问的是 inner join 的具体实现?先确认一下是算法题还是 sql 题。算法题的话可能想考 sort merge join 或者 hash join 一些优化实现。
    dog82
    dog82
    Sep 27, 2022
    7
    5 楼的思路很不错
    lookStupiToForce
    lookStupiToForce
    Sep 27, 2022
    8
    以 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
    agmtopy
    Sep 27, 2022
    9
    猜?先比较索引字段,在比较其他?
    nnnneymarjr
    nnnneymarjr
    OP
    Sep 27, 2022
    10
    @mazhan465 是一个不错的思路
    nnnneymarjr
    nnnneymarjr
    OP
    Sep 27, 2022
    11
    @allforone 应该像是场景题
    tobias7
    tobias7
    Sep 27, 2022
    12
    @mazhan465 能否细说说
    copper20
    copper20
    Sep 27, 2022
    13
    允许假阳性存在的话可以考虑布隆过滤器,线性时间能应该就能搞定了

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