2011-08-05 24 views
0

我使用SQL Server 2008的缓慢进行查询,寻找创意的解决方案

我有一个名为testView

在一列正在使用此页面所采取的另一个查询的观点看法 - http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

即沿此格式

Create View testView as 
    SELECT p1.CategoryId,  
      (SELECT ProductName + ','  
       FROM Northwind.dbo.Products p2  
       WHERE p2.CategoryId = p1.CategoryId  
       ORDER BY ProductName  
       FOR XML PATH('')) AS Products  
    FROM Northwind.dbo.Products p1 

当下面的查询运行时,它正在约110秒的时候有60,000视图中的行。

select * from testView where Products like '%asdf%' 

可以提供哪些建议来改进此查询?

+0

沿着'GROUP BY p1.CategoryId'的行,可能吗? –

回答

0

我会做的第一件事就是通过解释函数运行查询。这将详细描述查询处理,以便您可以查看数据库将要花费的时间。寻找它在做全表扫描的位置,因为这些通常是你需要应用索引的罪魁祸首和指标。

+0

你是什么意思'解释功能' – gotsp

+0

这将是@ link664提到的查询分析器。大多数数据库都有这些类型的分析程序,可以分析查询并报告数据库如何处理。在某些数据库上被称为“解释”,通常以“解释选择...”的形式输入。 – drekka