【问题标题】:Compare two large table for unique record比较两个大表的唯一记录
【发布时间】:2013-08-21 21:36:03
【问题描述】:

我有两个表,其中 tableA 包含 100 万条记录,而另一个 tableB 包含 1300 万条记录,现在我想要 tableA 中那些不在 tableB 中的记录

我用下面的查询

 SELECT tableA .mergedSSN,total_unique_ssn.unique_ssn  FROM `tableA`,`tableB` WHERE tableA.mergedSSN <> tableB.unique_ssn 

但是上面的查询时间太长了,请帮我快速获取记录。

【问题讨论】:

  • 表是如何关联的,你有什么索引
  • total_unique_ssn 来自哪里?
  • 使用 select .. from tbl1,tbl2 (笛卡尔)非常慢,可能这就是你的查询卡住的原因;)。

标签: php mysql


【解决方案1】:

首先,按每个表中的列创建索引(如果您还没有)。那么,

SELECT 
  tableA.mergedSSN
FROM
  tableA 
  LEFT JOIN
    tableB ON tableA.mergedSSN=tableB.unique_ssn
WHERE
  tableB.unique_ssn IS NULL

【讨论】:

    【解决方案2】:

    怎么样

    SELECT tableA.unique_ssn FROM tableA
    WHERE tableA.unique_ssn NOT IN (SELECT tableB.unique_ssn FROM tableB)
    

    您需要确保将 tableA.unique_ssn 和 tableB.unique_ssn 作为索引字段。

    【讨论】:

    • 有什么区别?
    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多