【发布时间】:2011-03-29 14:56:13
【问题描述】:
大家好, 我在 sql server 中有一个查询至少需要 10-15 秒才能执行,当在 asp.net 中调用它时,情况更糟,它只会引发请求超时错误。
以下是我正在使用的查询。
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
我认为这可以通过使用包含在这些列上使用索引来解决。我在网上检查过,但没有找到任何解决方案..
如果我能得到同样的帮助,我将不胜感激。 谢谢并恭祝安康 阿巴斯电气瓦拉
【问题讨论】:
-
您需要为此查看全文索引。您正在对表上最宽的 3 个列进行领先的通配符搜索,因此聚集索引扫描是此查询的唯一合理计划/索引。
CrossArticle_Article有多少行? -
@Martin:crossarticle_article 中大约有 22000 条记录。你能告诉我如何使用全文索引来解决这个问题
标签: sql-server-2008 clustered-index