2010-12-03 24 views
1

以下は私のクエリです.1分程度の時間がかかり、何度か結果が返されます。 問題が発生しました。前に、またはいくつかの新しいキーワードをクエリに入れてください。 実行計画を実行すると、インデックスの問題のように見えますが、RIDルックアップのコストは60%です。ソーステーブルにはLacsデータが2〜5個あり、1日に約10,000〜20,000行が追加されます。私に助言してください。おかげSQL Serverクエリfreetexttableで時間がかかる - 索引問題

SELECT * 
FROM (SELECT Row_number() OVER (ORDER BY rank DESC, jobid DESC) AS rnum, 
       * 
     FROM (SELECT rank, 
         joblistview.* 
       FROM joblistview, 
         FREETEXTTABLE(joblistview, jobtitle, 'seo manager') f 
       WHERE joblistview.jobid = f.[key] 
         AND CONTAINS(joblistview.joblocation, 'mumbai') 
       UNION 
       SELECT rank, 
         joblistview.* 
       FROM joblistview, 
         FREETEXTTABLE(joblistview, jobdescription, 'seo manager') 
         f 
       WHERE joblistview.jobid = f.[key] 
         AND CONTAINS(joblistview.joblocation, 'mumbai') 
       UNION 
       SELECT rank, 
         joblistview.* 
       FROM joblistview, 
         FREETEXTTABLE(joblistview, company_name, 'seo manager') f 
       WHERE joblistview.jobid = f.[key] 
         AND CONTAINS(joblistview.joblocation, 'mumbai')) AS xx)AS 
     tt 
WHERE rnum BETWEEN 11 AND 20 

実行計画

SQL Execution Plan

+0

あなたは同じクエリを3回結合しました。何が得られますか? –

+0

これらは同じクエリではなく、各クエリはFREETEXTTABLE関数を使用して異なる列(jobtitle、jobdescription、company_name)を検索します。 – AUSteve

答えて

0

あなたは労働組合との複数のクエリの必要性を排除すべき、単一FREETEXTTABLE検索で複数の列を指定することができます。

SELECT * 
FROM (SELECT Row_number() OVER (ORDER BY rank DESC, jobid DESC) AS rnum, 
       * 
     FROM (SELECT rank, 
         joblistview.* 
       FROM joblistview, 
         FREETEXTTABLE(joblistview, (jobtitle,jobdescription,company_name), 'seo manager') f 
       WHERE joblistview.jobid = f.[key] 
         AND CONTAINS(joblistview.joblocation, 'mumbai') 
       ) AS xx 
     ) AS tt 
WHERE rnum BETWEEN 11 AND 20 
+0

こんにちは、お返事ありがとうございます。 私はすでにそれを行っていますが、その結果は、連合との関連ではるかに優れています。もちろん、複数の列の結果は速く来るでしょう。 連合でも結果は良いですが、問題はインデックスに関連していると思います。新しい用語を検索するには、あまりにも時間がかかります。 – Vkalal

0

すべての検索列のデータを含む計算列を追加しようとしましたか?次に、この計算された列を永続化するように構成し、フルテキスト索引にします。試してみることができます

SELECT * 
FROM (SELECT Row_number() OVER (ORDER BY rank DESC, jobid DESC) AS rnum, 
       * 
     FROM (SELECT rank, 
         joblistview.* 
       FROM joblistview, 
         FREETEXTTABLE(joblistview, (<<<ComputedColumn>>>), 'seo manager') f 
       WHERE joblistview.jobid = f.[key] 
         AND CONTAINS(joblistview.joblocation, 'mumbai') 
       ) AS xx 
     ) AS tt 
WHERE rnum BETWEEN 11 AND 20 
関連する問題