1

リモートクエリを使用してwhere句を適用すると、SQLサーバーのパフォーマンスの問題に少し戸惑います。ローカルサーバーでクエリを実行すると、クラスター化インデックスシークが使用されますが、リモートからはそうではありません。

したがって、これをローカルサーバーで実行すると、2秒かかります。

SELECT * FROM uv_order WHERE order_id > '0000200000'

ただし、これをリモートデータベースから実行するには2分かかります。

SELECT * FROM RemoteServer.data.dbo.uv_order WHERE order_id > '0000200000'

これuv_orderは非常に複雑なビューですが、ローカルサーバーから実行するときにインデックスシークが使用されるため、リモートクエリを実行するときにインデックスシークを使用できない理由がわかりません。テーブルで同じことを行うと期待どおりに機能するため、これはビューに適用するシームのみです。

なぜこれが起こるのか、そしてそれを「修正」する方法はありますか?

4

1 に答える 1

2

まあ、あなたはこのようにそれを修正することができます

select *
from openquery(
    RemoteServer,
    'select * from data.dbo.uv_order WHERE order_id > '''0000200000''''
)
于 2012-11-26T10:02:08.833 に答える