SQL Server Query Некоторое время занимает слишком много времени с freetexttable - Looks Index Problem - PullRequest
1 голос
/ 03 декабря 2010

Следующий мой запрос, он занимает некоторое время около 1 минуты и несколько раз дает результат в секунду, возникла проблема, особенно если я выполняю запрос через некоторое время назад или вставляю в запрос новое ключевое слово.Похоже на проблему с индексом, когда я выполнил план выполнения, поиск RID составил 60%.Исходная таблица содержит около 2-5 данных Lacs, и ежедневно будет добавляться около 10 000–20 000 строк.Пожалуйста, посоветуй мне.Спасибо

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

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Вы пытались добавить вычисляемый столбец, который содержит данные всех ваших столбцов поиска? Затем сконфигурируйте этот вычисляемый столбец так, чтобы он сохранялся, и пусть он будет полнотекстовым индексированным. Вы можете попробовать

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 
0 голосов
/ 03 декабря 2010

Вы можете указать несколько столбцов в одном поиске FREETEXTTABLE , что исключит необходимость в нескольких запросах с UNION.

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  
...