索引问题在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
不幸的是,普通列索引很可能无法帮助您查询。 LIKE
条件只能在索引为value%
(意味着您只能在表达式的结尾处具有通配符;前缀必须是静态的)时才由索引协助。
我假设你已经有一个索引CrossArticle_Article.Id
和CrossArticle_ArticleToCategory.ArticleId
。如果不是,你应该添加这些。
感谢您的回复,是的,我对这两个领域都有主键索引,并且如果我在表达式的末尾使用通配符,我该如何做性能更好.. – Abbas 2011-03-29 15:06:08
@Abbas:如果表达式末尾只有一个通配符,那么在'Title','Summary'和'Article'上添加一个索引应该会有所帮助。 – 2011-03-29 15:12:32
您需要查看全文索引。您正在对表上最宽的3列进行主导通配符搜索,因此聚簇索引扫描是此查询唯一合理的计划/索引。 'CrossArticle_Article'中有多少行? – 2011-03-29 14:59:49
@Martin:在crossarticle_article中有大约22000条记录。你能告诉我如何使用全文索引来解决这个问题 – Abbas 2011-03-29 15:07:29