优化左连接

时间:2016-07-11 14:37:13

标签: mysql sql performance left-join notin

我正在尝试从表中找到一些不在另一个表中的数据。

我尝试使用不同的解决方案,但我的问题始终是性能(table_a有~100 000行,table_b有~580万行)。

是否有快速(呃)和/或(更有效)的方法来做到这一点?

提前致谢...

SELECT
    *
FROM
    table_a a
LEFT JOIN
    table_b b ON b.field_one = a.field_one
WHERE 1
    AND b.id IS NULL

1 个答案:

答案 0 :(得分:2)

您可以尝试使用此NOT EXISTS()版本,这可能更有效(不一定):

SELECT * FROM Table_a a
WHERE NOT EXISTS(SELECT 1 FROM Table_b b
                 WHERE a.field_old = b.field_one)

您还应该考虑在表格上添加(如果您还没有)索引:

Table_a(Field_one)
Table_b(Field_one)

除非这些表格非常宽(很多列),如果这些数据具有正确的索引,它就不应该花这么长时间。