我有一张 MySQL 5.7 表,其中有 800 万条不同的电子邮件记录。
我还有另一张表,其中有大约 200 万条记录,且电子邮件各不相同。
我想查看较大表中存在于较小表中的电子邮件。
我在我的较大表格中添加了一列并将其命名为“它” in_2nd_table
,然后将其留空。
然后我写了一个如下查询:
UPDATE `mainTable` set `in_2nd_table` =
CASE WHEN `email` IN (SELECT `email` FROM `2ndTable`) THEN 'Y' ELSE 'N' END;
但我猜这些表太大了,查询总是出错。我不断得到类似这样的 500:https ://i.sstatic.net/0bn2R.png
我也尝试创建这样的表格:
CREATE TABLE `test` AS SELECT * FROM `mainTable` WHERE `email` NOT IN (SELECT `email` FROM `2ndTable`);
但它也不断出错,抛出同样的 500 错误。
表上没有索引。我尝试在较大的表上添加索引,但再次出现 500 错误。
我只是想看看大表中的哪些记录存在于小表中。
我怎样才能让它工作?
我会将您的逻辑写为更新连接:
上述查询将受益于第二个表上的以下索引:
该索引允许从第一个表在第二个表中快速查找每个电子邮件值。
我更喜欢
EXISTS
它,因为它运行速度更快email
两个表上的字段都应被索引。请参阅MySQL:NOT EXISTS 与 LEFT OUTER JOIN...IS NULL