ユーザーメッセージを特定のユーザーで検索できるシステムを作りたいです。次の表があると仮定します
create table messages(
user_id int,
message nvarchar(500));
'foo' という単語を含むユーザー 1 からのすべてのメッセージを検索するには、ここでどのようなインデックスを使用すればよいでしょうか。
- シンプルで一意でないインデックスuser_id
特定のユーザー メッセージのみをフィルタリングし、特定の単語をフル スキャンします。 - メッセージのFULLTEXTインデックスは、すべてのユーザーからのすべてのメッセージ
を検索し、ID でフィルター処理します。ユーザー数が多い場合、非常に非効率的です。 - user_idとmessageの両方に複合インデックスを作成
するため、ユーザーごとに個別に全文インデックス ツリーが作成されるため、ユーザーを個別に検索できます。クエリ中、システムはメッセージをIDでフィルタリングし、インデックス内の残りの行に対してテキスト検索を実行します。
私の知る限り、最後のものは不可能です。それでは、最初のオプションを使用すると仮定します。数千人のユーザーの場合、パフォーマンスが向上しますか?
また、それぞれに最大 100 個のメッセージがある場合、完全な反復は多くのリソースを消費しませんか?
おそらく、ユーザー名をメッセージに含めて BOOLEAN 全文検索モードを使用できますが、インデックス付きのuser_idを使用するよりも遅くなると思います。