我有一个名为 users 的表,其中大约有 250,000 条记录。我有另一个名为 staging 的表,其中包含大约 75,000 条记录。Staging 只有一列,msisdn。我想检查用户中不存在暂存的多少行。
我有以下查询,我已经在一个小数据子集上进行了测试,它似乎工作正常:
SELECT
s.*
FROM staging s
LEFT OUTER JOIN users u ON u.msisdn=s.msisdn
WHERE u.msisdn IS NULL
然而,问题是当我尝试在 250k 用户的完整列表上运行此查询时。在我停止之前它运行了一个小时。有什么办法可以优化这个查询吗?
我已经开始对暂存中的数据子集运行查询,但这是非常手动的:
SELECT
s.*
FROM staging s
LEFT OUTER JOIN users u ON u.msisdn=s.msisdn
WHERE u.msisdn IS NULL
LIMIT 0,10000
msisdn 是 staging 表的主键,但它不是表 users 的主键。我不知道这是否重要。