2011-03-29 5 views
0

hey guys, У меня есть запрос в sql-сервере, который занимает как минимум 10-15 секунд для выполнения, и когда это вызывается в asp.net, это хуже, он просто бросает запрос таймаута ошибка.Проблема с индексированием в sql-сервере

Ниже приведен запрос, который я использую.

SELECT C.Id, 
     C.Summary, 
     C.Title, 
     C.Author, 
     CONVERT(VARCHAR(12), C.PublishDate, 104) 
     AS 'DATE', 
'/Article/' + SUBSTRING(dbo.RemoveSpecialChars(C.Title), 0, 10) + '/' + CAST(CA.CategoryId AS VARCHAR(MAX)) + '/' + CAST(C.Id AS VARCHAR(MAX)) + 
'.aspx' AS 
'URL' 
FROM CrossArticle_Article C 
     INNER JOIN CrossArticle_ArticleToCategory CA 
     ON C.Id = CA.ArticleId 
WHERE C.Title LIKE '%' + @KEYWORD + '%' 
     OR C.Summary LIKE '%' + @KEYWORD + '%' 
     OR C.Article LIKE '%' + @KEYWORD + '%' 


    SELECT @@ROWCOUNT 

Ниже приведены поля.

Id int Primary Key 
Summary nvarchar(1000) 
Title nvarchar(200) 
Author nvarchar(200) 
PublishDate DateTime 
CategoryId int PrimaryKey 

я думаю, что это может быть решена с помощью индексации на этих колонках с использованием включают .. я проверил сеть, но не нашли никакого решения ..

я был бы признателен, если я мог бы получить помощь для того же , С уважением, Abbas Electricwala

+0

Для этого вам понадобится полное индексирование текста. Вы выполняете поиск подстановочных знаков в трех самых больших столбцах таблицы, поэтому кластерное сканирование индексов является единственным разумным планом/индексированием для этого запроса. Сколько строк находится в 'CrossArticle_Article'? –

+0

@Martin: в crossarticle_article насчитывается около 22000 записей. можете ли вы также рассказать мне, как я могу использовать полнотекстовый индекс для решения этой проблемы? – Abbas

ответ

1

Обычное индексирование столбцов, скорее всего, не поможет вашему запросу, к сожалению. LIKE условиям могут быть предоставлены только индексы, если они находятся в форме value% (это означает, что вы можете иметь только подстановочный знак на конец выражения, префикс должен быть статическим).

Я предполагаю, что у вас уже есть индекс на CrossArticle_Article.Id и CrossArticle_ArticleToCategory.ArticleId. Если нет, вы должны добавить их.

+0

Спасибо за ваш ответ, да, у меня есть индекс первичного ключа для обоих этих полей, а также если я использую подстановочный знак только в конце выражения, как я могу сделать производительность лучше .. – Abbas

+0

@Abbas: Если у вас есть только подстановочный знак в конце выражения, добавление индекса в 'Title',' Summary' и 'Article' должно помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^