2012-01-22 11 views
1

私はニュースレタースクリプトを作成していますので、アドレスを検索する必要があります。 FULLTEXTを使用してテーブルのインデックスを作成しましたが、次のようなクエリを実行したとき:メールアドレスを検索したときのMySQLの一致

SELECT * FROM addresses WHERE MATCH(email) AGAINST("[email protected]" IN BOOLEAN MODE) 

私は奇妙な結果を得ます。 "example.com"にあるすべての電子メールと、 "name"というユーザを持つすべての電子メールが表示されます。たとえば、私が得る:

[email protected] 
[email protected] 
[email protected] 

私は「%[email protected]%」のように使用するクエリを書き直しますが大きなテーブルのためにそれが完了するまでに時間のとんでもない量になります。 これには解決策がありますか?完全に一致するメールのみを表示するように検索するときに、そのメールの一部ではないことをおすすめします。前もって感謝します。

+1

:だからあなたのクエリを変更します'? – Jivings

+0

7Mレコードテーブルでは、それを見つけるのに5秒かかります。 MATCH AGAINSTを使うとずっと高速です。 – Vladimir

+2

電子メール列に通常のインデックスを付けて、直接比較クエリを高速化します。ここでフルテキストインデックスには利点はありません。 – bobince

答えて

6

正確なフレーズを一致させるには、フレーズを二重引用符で囲む必要があります。あなたが列に完全に一致をしたい場合は、なぜあなたは単に `電子メール=「[email protected]」アドレスから*を選択することはできません

SELECT * FROM addresses WHERE MATCH(email) AGAINST('"[email protected]"' IN BOOLEAN MODE)

Source

+0

私はそれを考えなかったとは思えません。ありがとう、これは私の問題を解決しました。 – Vladimir

+1

しかし、真剣に、インデックス付きの列で 'SELECT'を考えてみましょう。マッチよりはるかに速くなければならない。 – Jivings

関連する問題