5

フィールド(id、first_name、middle_name、last_name)を持つテーブルUserがあります。

名前でユーザーを検索するクエリを書きたいと思います。名前は、ファースト ネーム、ミドル ネーム、ラスト ネームのいずれでもかまいません。

$sql = "SELECT * FROM user 
        WHERE first_name like '%$name%' OR  
              middle_name like '%$name%' OR
              last_name like '%$name%'";

効率的なクエリですか?(セキュリティの問題は当分の間置いておきます。)

4

3 に答える 3

3

テーブルを変更し、複合フルテキスト インデックスを追加してFirst_name,second_name,last_nameから、このクエリを使用します

select * 
from table_name 
where match (`First_name`,`second_name`,`last_name`) against('name')

クエリよりもかなり高速です。

于 2012-04-04T07:42:27.023 に答える
1

LIKE '%something%'WHERE 句にがあるとすぐに、テーブル スキャンを強制します。そうです、それは非効率的ですが、1 つまたは 3 つのLIKEステートメントではほとんど違いはありません。

テーブル スキャンは、大きなパフォーマンス ヒットです。

MySQL の全文検索機能を調べてみてください。このタイプのクエリにはるかに効率的に答えるように設計されています。

于 2012-04-04T07:06:30.480 に答える
0

複数のフィールドでパターンを検索する必要があり、テーブル スキーマを変更する権限がある場合は、FULL-TEXT SEARCHを実装することをお勧めします。

それが役に立てば幸い :)

于 2012-04-04T07:09:06.160 に答える