2016-05-04 8 views
0

私は1500万レコードのテーブルを持っています。電子メールアドレス(潜在的に複数のアドレス)の列を検索し、そのアドレスを別のテーブルに配置したいと考えています。それは厳密である必要はありません、例えば '@ gmail.com' | 「@ hotmail.com」で十分です。電子メールアドレスのMySQL検索欄

私はinnodbを使用していますが、必要に応じてfulltextはオプションです。

+0

あなたの質問を編集して、メールアドレスと思われるものとそうでないものの例を含めてください。 –

答えて

1

手順1:既に存在するテーブルと同じようにテーブルを作成します。クレート新しいテーブルに、この下のクエリを使用

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

またはあなただけのクエリ下表の使用中の電子メールアドレスが必要な場合を行うには

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

ステップ2:「で終わるレコードを選択します@ gmail.com'|'@hotmail.com」 とあなただけの電子メールアドレスを格納するテーブルを作成している場合は、SELECT文で新しいテーブルに*の

使用メールインプレースそれらを挿入し

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

編集: 私たちはここにワイルドカード検索を使用しているとして、あなたは、データがある1500万であることを述べてきたように、我々は1

を作成する場合でも、列の電子メールのインデックスを利用することができませんトランザクション時間の可能性が出て

ので、ちょうどとが働いクエリを取得するために、ここでをオフセット制限を追加

例えば

:上記のクエリはserachとあなたのテーブルから最初の500万件のレコードを挿入します

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

(あなたが各トランザクション5万件のレコードを使用する場合は、さらに2つのクエリを使用する必要があります) 2番目のクエリ:

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

レコードはキャプションやバイオなどのようなもので、電子メールで終わらない場合もありますが、電子メールはレコード内にあります。もし1,500万のレコードがあるなら、LIKEコマンドは良い解決策になるでしょうか? – mils

+0

@milsは私の答えを親切に編集しました –

+0

@Anthonyはいいですが、まだ電子メールがレコードの最後にあると仮定していると思いますか? – mils

0

あなたは

"Their emails are [email protected] and [email protected], ok" 
を語るコラムをお持ちの場合

実際にテキストから電子メールアドレスを抽出する作業を行うために、アプリケーションコードを記述する必要があります。 SQLでそうすることは大いに非実用的です。 FULLTEXTインデックスは、あなたがすべてのドメイン名を知っていなければ役に立ちません。それでもそれほど助けにならないでしょう。

関連する問題