2016-05-04 26 views
0

Ich habe eine Tabelle mit 15 Millionen Datensätzen. Ich möchte eine Spalte nach E-Mail-Adressen (möglicherweise mehrere Adressen) durchsuchen und die Adressen in einer anderen Tabelle platzieren. Es muss nicht streng sein, zum Beispiel '@ gmail.com' | '@ hotmail.com' ist ausreichend.MySQL-Suchspalte für E-Mail-Adressen

Ich verwende innodb, aber Volltext ist eine Option, wenn erforderlich.

+0

Bitte bearbeiten Sie Ihre Frage und fügen Sie Beispiele ein, was Sie als E-Mail-Adresse betrachten und was nicht. –

Antwort

1

Schritt 1: Erstellen Sie eine Tabelle wie die Tabelle, die bereits vorhanden ist. Dazu verwenden Sie die unten stehende Abfrage

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

oder wenn Sie wollen nur die E-Mail-Adressen in der Tabelle Verwendung unter Abfrage Kiste neue Tabelle

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

Schritt 2: Wählen Sie die Datensätze, die mit ‚endet @ gmail.com'|'@hotmail.com‘ und sie in die neue Tabelle

Verwendung E-Mail Inplace von * in select-Anweisung einfügen, wenn Sie eine Tabelle erstellt haben, nur Adressen E-Mail speichern

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

edit: Wie wir hier Wildcard-Suche verwenden wir nicht Verwendung von Indizes auf Spalte E-Mail machen können, auch wenn wir ein

erstellen Wie Sie erwähnt haben, dass die Daten 15 Millionen gibt es Möglichkeiten für die Transaktionszeit

aus

so fügen Sie einfach Limit und Offset hier die Abfrage bekommen arbeiten

zum Beispiel:

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

die obige Abfrage serach wird und die ersten fünf Millionen Datensätze aus Ihrer Tabelle einfügen (Sie müssen zwei weitere Abfragen verwenden können, wenn Sie in jeder Transaktion verwenden 5 Millionen Datensätze)

zweite Abfrage:

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; 
+0

Die Datensätze sind wie eine Beschriftung oder eine Biografie, sie dürfen nicht mit der E-Mail enden, sondern die E-Mail (s) werden in den Datensätzen enthalten sein. Wenn es 15 Millionen Datensätze gibt, ist ein LIKE-Befehl eine gute Lösung? – mils

+0

@mils bearbeitet meine Antwort bitte überprüfen Sie jetzt –

+0

@Anthony ist gut, aber ich denke, es geht immer noch davon aus, dass die E-Mail am Ende der Aufzeichnung sein wird, nicht? – mils

0

Wenn haben Sie eine Spalte, die

"Their emails are [email protected] and [email protected], ok" 
sagt

Sie müssen wirklich Anwendungscode schreiben, um die E-Mail-Adresse (n) aus dem Text zu extrahieren. Es ist äußerst unpraktisch, dies in SQL zu tun. Ein FULLTEXT Index hilft nur, wenn Sie alle Domain-Namen kennen. selbst dann wird es nicht viel helfen.