【问题标题】:Indexing issue in sql serversql server中的索引问题
【发布时间】: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


【解决方案1】:

不幸的是,普通列索引很可能无法帮助您查询。 LIKE 条件只有在value% 的形式下才能由索引辅助(意味着您只能在表达式的end 上使用通配符;前缀必须是静态的)。

我假设您已经在 CrossArticle_Article.IdCrossArticle_ArticleToCategory.ArticleId 上建立了索引。如果没有,您应该添加这些。

【讨论】:

  • 感谢您的回复,是的,我确实在这两个字段上都有主键索引,而且如果我在表达式的末尾使用通配符,我怎样才能使性能更好..
  • @Abbas:如果表达式末尾只有一个通配符,那么在TitleSummaryArticle 上添加索引应该会有所帮助。
猜你喜欢
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多