我正在使用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%'
可以提供哪些建议来改进此查询?
答案 0 :(得分:1)
我会使用SQL Server内置的查询分析器来探索执行计划,并找出花费最多时间的地方。
http://www.sql-server-performance.com/2006/query-analyzer/
专门启用“显示执行计划”和“统计IO和时间”。
常见的一点是性能调优logical and physical reads。您希望减少物理读取次数,以便在缓存中而不是在磁盘上完成读取。
答案 1 :(得分:0)
我要做的第一件事就是通过explain函数运行查询。这将详细说明对您的查询处理,以便您可以查看数据库将花费时间的位置。寻找它进行全表扫描的位置,因为这些通常是您需要应用索引的罪魁祸首和指标。