1

クライアントが電話番号、携帯電話番号、FAX番号などを簡単に検索できるようにしたいと考えています。そのためには、データベース内の検索値と関連する列の両方から、数字以外の文字を比較する前に削除します。これらの関数を使用してmysqlの文字列の数値要素のみを取得していますが、これらの関数を使用すると、クエリの速度が低下してクロールします。

実行時間を空高く吹き飛ばさずにそれを行う方法はありますか?

4

2 に答える 2

2

アクセス権と許可がある場合、これらのランタイムを回避する最善の方法は、フィルタリングしているコンテンツを含む新しい列を追加することです。WRITE トリガーを追加して、削除された値を列に入力し、すべてのレコードに対してフィールドを 1 回更新するスクリプトを実行します。インデックスを追加し、新しい列を含めます。次に、アプリケーションで、新しい列を使用して電話の数値を検索します。欠点は、テーブル スキーマの変更と、ビジネス ロジックやデータ抽象化レイヤーのコードの追加です。

于 2012-05-30T11:39:59.980 に答える
2

クエリ時間が爆発的に増加している理由は、そのような関数を使用すると、インデックスを使用できなくなるためです。フィールドを直接検索するのではなく、関数の出力を検索するため、mySQL がインデックスを使用してクエリを実行する方法はありません。

これは、各レコードの関数出力を計算する必要があるという事実に加えてです。

于 2012-05-30T11:36:00.027 に答える