索引问题在SQL服务器

问题描述:

嘿家伙, 我有一个查询在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

您需要查看全文索引。您正在对表上最宽的3列进行主导通配符搜索,因此聚簇索引扫描是此查询唯一合理的计划/索引。 'CrossArticle_Article'中有多少行? – 2011-03-29 14:59:49

+0

@Martin:在crossarticle_article中有大约22000条记录。你能告诉我如何使用全文索引来解决这个问题 – Abbas 2011-03-29 15:07:29

不幸的是,普通列索引很可能无法帮助您查询。 LIKE条件只能在索引为value%(意味着您只能在表达式的结尾处具有通配符;前缀必须是静态的)时才由索引协助。

我假设你已经有一个索引CrossArticle_Article.IdCrossArticle_ArticleToCategory.ArticleId。如果不是,你应该添加这些。

+0

感谢您的回复,是的,我对这两个领域都有主键索引,并且如果我在表达式的末尾使用通配符,我该如何做性能更好.. – Abbas 2011-03-29 15:06:08

+0

@Abbas:如果表达式末尾只有一个通配符,那么在'Title','Summary'和'Article'上添加一个索引应该会有所帮助。 – 2011-03-29 15:12:32