0

我有一个包含大约 8 亿个条目的电子邮件表,我需要将它与大约 100,000 封电子邮件的列表进行匹配。数据库中的电子邮件条目已编入索引。

最好的查询是什么?我尝试使用我想要匹配的条目创建一个临时表,然后对该表和主表执行 SELECT,但它似乎应该比它更快 - 多个查询似乎变慢了。有什么建议么?

服务器在 CentOS 6.3 上运行 MySQL 5.5.27。

编辑:这里是创建语句:

CREATE TEMPORARY TABLE temptable (Email varchar(50)) 
CREATE INDEX tempindex ON temptable (Email)

这是我的查询:

SELECT temptable.Email FROM temptable, biglist WHERE temptable.Email = biglist.Email

这是解释结果:

+----+-------------+-----------+-------+---------------+-----------+---------+-----------------------+------+--------------------------+
| id | select_type | table     | type  | possible_keys | key       | key_len | ref                   | rows | Extra                    |
+----+-------------+-----------+-------+---------------+-----------+---------+-----------------------+------+--------------------------+
|  1 | SIMPLE      | temptable | index | tempindex     | tempindex | 53      | NULL                  |   21 | Using index              |
|  1 | SIMPLE      | biglist   | ref   | idx_Email     | idx_Email | 202     | datab.temptable.email |    1 | Using where; Using index |
+----+-------------+-----------+-------+---------------+-----------+---------+-----------------------+------+--------------------------+
4

1 回答 1

1

您是否正在寻找类似的东西:

select emailaddress,
       (case when bg.emailaddress is NULL then 'MISSING' else 'PRESENT' end)
from TEMPemail te left outer join
     BigTable bg
     on te.emailaddress = bg.emailaddress

您将电子邮件放在临时表中的想法是一个好主意。如果您在临时表和较大的表上都有索引,则查询可能会执行得更好。

于 2012-12-18T19:27:29.143 回答