SQL Server Query Некоторое время занимает слишком много времени с freetexttable - Looks Index Problem
Ниже приведен мой запрос, он занимает некоторое время около 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
План выполнения
2 ответа
Вы можете указать несколько столбцов в одном поиске 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
Вы пытались добавить вычисляемый столбец, который содержит данные всех ваших поисковых столбцов? Затем сконфигурируйте этот вычисляемый столбец так, чтобы он сохранялся, и пусть он будет полнотекстовым индексированным. Вы могли бы тогда попробовать
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