はい、可能性がある場合は、両方をlast, first
に置くことができます およびfirst last
データベースに組み込む場合、スキーマを適切に設計するのがより良い方法です。
これまでの場合 パーツを検索したり、操作したりしようとしていることに気づきます。 列の数では、スキーマはほぼ確実に壊れています。ほぼ確実にパフォーマンスが低下します。
正しい方法は、次のようにテーブルを作成することです。
T1 FirstName LastName
== ========= ========
1 Pax Diablo
2 Bob Smith
3 George Jones
そうすれば、データベース内のすべての名前を分割しようとするのではなく、ユーザーが入力した名前を(クエリを実行する前に一度)より効率的に分割できます。
データベースの場合 常にlast, first
を保持します 、スキーマの変更には実際には必要ない場合があります。
その場合の問題は、ユーザーが入力した内容を解釈することだけです。
1つの可能性は、パフォーマンスキラーですが、like
を実行することです。 個別の単語ごとに。したがって、ユーザーがpax diablo
と入力した場合 、結果のクエリは次のようになります:
select T1 from mytable
where T2 like '%pax%'
and T2 like '%diablo%'
そうすれば、注文はそれほど気になりません。
ただし、遅いクエリが嫌いなため、どうしても必要な場合を除いて、それを避けようとします(または、データベースが比較的小さく、そのままの状態を維持する可能性があります)。
これらの種類のクエリを高速化するには、次のようなさまざまな方法があります。
- DBMSが持つ全文検索機能を使用します。
- 挿入/更新トリガー中に単語を抽出して保存する(および削除トリガー中に単語を削除する)ことにより、このような機能をエミュレートします。
- 前のケースですが、現在の列の小文字の値で使用される追加の列も確保します(速度のため)。
- ユーザーに
last, first
を使用する必要があることを伝える 検索用のフォーム。 -
%something%
を回避しようとしています 可能な限り文字列を検索します(something%
を使用) 、インデックスは引き続き使用できます。 - 前述の「名前を2列に分割する」方法。