正規表現スタイルのWHERE
を使用する必要がある場合 句、あなたは間違いなく遅いクエリの問題に悩まされるでしょう。正規表現スタイルの検索を機能させるには、MySQLで名前列のすべての値を正規表現と比較する必要があります。また、ユーザー名の列も確認することで、クエリの問題が2倍になりました。
これは、MySQLがインデックスを利用できないことを意味します。これは、すべてのDBMSが大きなテーブルのクエリを高速化する方法です。
試すことができることがいくつかあります。それらはすべて、REGEXPに別れを告げることを含みます。
1つはこれです:
WHERE name LIKE CONCAT('jack', '%') OR username LIKE CONCAT('jack', '%')
名前とユーザー名の列にインデックスを作成する場合、これはかなり高速である必要があります。 'jack'で始まるすべての名前/ユーザー名を検索します。
に注意してくださいWHERE name LIKE CONCAT('%','jack') /* SLOW!!! */
'jack'で終わる名前を検索しますが、正規表現スタイルの検索のように遅くなります。
もう1つできることは、アプリケーションが名前またはユーザー名の一部を検索できる必要がある理由を理解することです。この機能をアプリケーションから削除するか、それを処理するためのより良い方法を見つけることができます。
考えられるより良い方法:
- ユーザーに、名前を名前と名前のフィールドに分割し、別々に検索するように依頼します。
- ユーザーが必要とする場合にのみ使用される個別の「すべてのユーザーを検索」機能を作成して、低速の正規表現スタイルのクエリの頻度を減らします。
- ある種の前処理プログラムを使用して、自分で名前を別の名前-単語テーブルに分割します。正規表現なしで名前と単語のテーブルを検索します。
- この機能にMySQL全文検索を使用する方法を理解してください。
これらはすべて、プログラミング作業を伴います。