我正在使用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%'
可以提供哪些建议来改进这个查询?
我会使用SQL Server内置的查询分析器来探索执行计划,并找出它在哪里花费了最多的时间。
http://www.sql-server-performance.com/2006/query-analyzer/特别打开显示执行计划,统计IO和时间。
一个常见的问题是何时调优逻辑读取和物理读取。您希望减少物理读取的次数,以便在缓存上完成读取,而不是在磁盘上。我要做的第一件事是通过一个explain函数运行查询。这将向您详细说明查询处理,以便您可以看到数据库将在哪里花费时间。查找它在哪里执行全表扫描,因为这些通常是需要应用索引的罪魁祸首和指示器。