2010-11-21 13 views
2

私は2つのテーブル、ドキュメント、リビジョンを持っています。ドキュメントには、ドキュメントIDとタイトルの2つの列があり、リビジョンにはドキュメントID、リビジョンID、本文の3つの列があります。特定の行でのみフルテキスト検索のインデックスを作成

リビジョンテーブルの本文列に対してフルテキスト検索を実行すると、最新のリビジョンに対してクエリを実行したいだけです。ドキュメントの最新のリビジョンの行だけにインデックスを付けるようにSQL Serverに指示する方法はありますか?

答えて

2

Afaikでは、特定のIDを持つレコードのみをインデックスする方法はありませんが、最新のリビジョンIDをクエリに追加できます。追加のように行うことができます

SELECT 
    * 
FROM 
    revisions r 
WHERE 
    /* Your r.body condition AND */ 
    r.revisionId = 
    (SELECT 
     MAX(mr.revisionId) 
    FROM 
     revisions mr 
    WHERE mr.documentid = r.documentid) 

あなたはいつも、ドキュメントテーブルまたは持つ別のテーブルにそのリビジョンのボディを追加する方が良いかもしれ最新バージョンのインデックスにのみ必要な場合文書との1:1の関係。この方法では、各ドキュメントにはインデックス付きのリビジョンが1つあり、他のリビジョンはバックアップ専用に格納されています。これは、ドキュメントに多数のリビジョンがある場合に特に便利です。

+0

ありがとうございます!私はすべてのリビジョンを検索し、他のリビジョンの結果を投げ捨てることは本当に汚いと感じています(アルゴリズムについてはあまり知らなくても、全体のランク結果が歪むかもしれません)。だから、リビジョンテーブルはドキュメントテーブルにあり、リビジョンテーブルはより多くのアーカイブとして存在します。 – inolen

関連する問題