0

I'm having performance issues with my SQL sub query.

As a hard-coded query, it takes about 1 second to run:

SELECT   ColumnA
        ,ColumnB
        ,ColumnC
FROM    [LinkedServer].[Database].[Schema].[View]
WHERE   ColumnA IN 
    (
        'ABC',
        'DEF',
        'HIJ',
        'KLM'
    )

However, the following code takes over a minute to run:

SELECT   ColumnA
        ,ColumnB
        ,ColumnC
FROM    [LinkedServer].[Database].[Schema].[View]
WHERE   ColumnA IN 
    (
        SELECT ColumnA FROM #TempTable
    )

The temp table contains the same 4 rows as the hard-coded example. The view on the linked server contains approx. 700,000 rows (and, unfortunately, is outside of my control). The ColumnA data types are the same and both tables are indexed.

Any ideas on how to improve the performance of this query?

Many thanks.

4

3 に答える 3

1

JOIN代わりに試してください:

SELECT   V.ColumnA
        ,V.ColumnB
        ,V.ColumnC
FROM    [LinkedServer].[Database].[Schema].[View] V
INNER JOIN #TempTable T ON V.ColumnA = T.ColumnA
于 2012-10-22T14:27:43.150 に答える
0

リンク サーバーのサプライヤーから、別の情報源が提供されました。ビュー (それ自体が複数のサーバーに分散していた) に接続する代わりに、単一のテーブルに接続するようになりました。これを Brian の INNER REMOTE JOIN 提案と組み合わせると、ほぼ即座に完全なデータセットが返されます。

強化された権限/リンク サーバー オプションに従えなかったのは少しイライラしますが、少なくともこのクエリはうまく機能しています。

みんなの助けに感謝します!

于 2012-10-23T15:48:12.130 に答える
0

おそらくクエリプランの作成方法に関連しています。あるケースでは、SQL サーバーは比較で使用する値を認識しており、2 番目のケースでは見積もりを行っています。[Include Actual Excecution Plan] をクリックした後、個別の Management Studio ウィンドウで各クエリを実行します。おそらく、さまざまな計画が表示されます。最初に確認することは、アクションをリンクする矢印 (太いものから始めます) にカーソルを合わせ、推定行数と実際の行数を比較することです。これらの値に大きな差異 (係数 10?) があると、SQL サーバーが間違った決定を下す可能性があります (テーブル スキャンとインデックスなど)。スロークエリを使用してください!ヒントの大きな問題は、データ量が変化するにつれて、ヒントが利点ではなく障害になりやすいことです。

于 2012-10-22T16:12:26.013 に答える