2011-08-05 8 views
0

のためにアイデアを探して、クエリを実行し、私は列の一つが、このページから取られた別のクエリを使用しているビューでTestViewには遅い私は、SQL Server 2008</p> <p>を使用しているソリューション

というビューを持っています - http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

すなわち、このフォーマットに沿って次のクエリを実行すると60,000がある場合

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秒を取っていますビュー内の行。

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

このクエリを改善するための提案はありますか?

+0

'GROUP BY p1.CategoryId'の行に何か、おそらく? –

答えて

0

最初に行うことは、Explain関数を使用してクエリを実行することです。これにより、処理される照会の詳細が表示され、データベースがどこに費やされるかを確認できます。フル・テーブル・スキャンを実行している場所を探してください。通常は、索引を適用する必要がある場所の犯人とインジケータです。

+0

「関数を説明する」とはどういう意味ですか – gotsp

+0

これは@ link664に言及しているクエリアナライザです。ほとんどのデータベースには、クエリを分析してデータベースがどのように処理するかを報告できる、これらの種類の分析プログラムがあります。いくつかのデータベースでは、 "explain"と呼ばれ、通常 "explain select ..."と入力されます。 – drekka

1

SQL Serverに組み込まれているクエリアナライザを使用して、実行計画を調査し、最も時間のかかる場所を特定します。

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

具体的に実行プランの表示をオンにし、統計IOと時刻。

よくあることはパフォーマンスチューニングlogical and physical readsです。物理的な読み取りの数を減らして、ディスク上ではなくキャッシュ上で読み取りが行われるようにしたいとします。

関連する問題