用于电子邮件地址的MySQL搜索列

时间:2016-05-04 02:44:09

标签: mysql regex full-text-search email-validation

我有一张包含1500万条记录的表格。我想在列中搜索电子邮件地址(可能是多个地址),并将地址放在另一个表中。它不必严格,例如' @ gmail.com' | ' @ hotmail.com'已经足够了。

我使用innodb,但如果需要,可以选择全文。

2 个答案:

答案 0 :(得分:1)

步骤1:创建一个表,就像已经存在的表一样。为此,请使用以下查询

create table <new Table> like <your Table Name>;

或者如果您只是希望表格中的电子邮件地址使用以下查询来创建新表格

create table <new Table> email varchar(30); 

第2步:选择以&#39; @ gmail.com&#39; |&#39; @ hotmail.com&#39;结尾的记录。 并将它们插入新表

如果您创建了一个仅存储电子邮件地址的表,请在select语句中使用电子邮件取代*

insert into <new Table> 
 select * from <your Table Name> 
  where email like '%@gmail.com' or email like '%@hotmail.com'

修改 由于我们在这里使用外卡搜索,即使我们创建一个

,我们也无法在列电子邮件中使用索引

正如您所提到的,数据为1500万,交易超时的可能性

所以只需在此处添加限制偏移即可使查询正常工作

例如:

insert into <new Table> 
 select * from <your Table Name> 
  where email like '%@gmail.com' or email like '%@hotmail.com'
limit 5000000 offset 0;

上述查询将从您的表中搜索并插入前500万条记录(如果您在每笔交易中使用500万条记录,则可能需要再使用两条查询)

第二个查询:

insert into <new Table> 
 select * from <your Table Name> 
  where email like '%@gmail.com' or email like '%@hotmail.com'
limit 5000000 offset 5000001;

insert into <new Table> 
 select * from <your Table Name> 
  where email like '%@gmail.com' or email like '%@hotmail.com'
limit 5000000 offset 10000001;

答案 1 :(得分:0)

如果您的列中有

"Their emails are asdf@foobar.com and theother@framis.org, ok"

您确实需要编写应用程序代码来执行从文本中提取电子邮件地址的任务。在SQL中这样做是非常不切实际的。除非您知道所有域名,否则FULLTEXT索引将无济于事;即便如此,它也无济于事。