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

运行以下查询时,如果视图中有 60,000 行,大约需要 110 秒。

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

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

4

2 回答 2

1

我会使用 SQL Server 中内置的查询分析器来探索执行计划并找出花费最多时间的地方。

http://www.sql-server-performance.com/2006/query-analyzer/

具体开启Show Execution Plan,以及Statistics IO and Time。

一个常见的问题是在性能调整逻辑和物理读取时。您希望减少物理读取的数量,以便在缓存上完成读取,而不是在磁盘上。

于 2011-08-05T01:28:12.560 回答
0

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

于 2011-08-05T00:44:59.050 回答