OPERQUERY効率についての問い合わせ、または正しい使い方

オリジナル:https://blog.csdn.net/u013641136/article/details/50379596

 

プロジェクトをやった、あなたはSQLSERVERのSQLSERVERにDBLINKのOPERQUERYアクセスORACLE ORACLEレコードによってクエリを作成し、テーブルに戻る必要が

100W約行のデータのORACLE量は、OPENQUERY FROM T1(X1、X2、X3)SELECT *(XXXXX)道に挿入用いて、効率はわずか数のレコードを返すために、特に非常にしばしば条件によってクエリ、非常に低いですそれは、xxxはOKでないOPENQUERY(XXXXX)* FROM T1(X1、X2、X3)SELECTに挿入するように変更しても、数十分を要します。これは、すでに遅いの効率の範囲が、問題のステートメントを超えています。

その後、OPERQUERY条件を置くことで、条件はまだありませんそれは二スロークエリと見なされているので、ORACLEする最初のクエリは方法の効率を向上させる、OPERQUERYプレスの問い合わせに条件、OPERQUERYにすべてのデータを返し、一瞬考えます値が、別の一時テーブル、実行OPERQUERYに条件として、固形方法カーソル、記録プロセス変数に一時テーブルを使用して。案の定、もはやそれだけで1秒に30分かかりSQLSERVERに問い合わせ3つのレコードを表示されません。
ステートメントの例:

@itemid NVARCHAR(宣言100 
auth_curカーソル宣言のために


選択ITEM_NUMBERを


からerp_part_item 


オープンauth_curは


次のフェッチから@itemidにauth_cur 


ながら(@@ FETCH_STATUS = 0 


  開始
    DECLAREの@TSQLのVARCHAR(8000 
    SELECT @TSQL = ' (HISTORY_ITEM挿入ITEM_NUMBER 、OPENQUERY(TO_ERPZS、FROM ITEM_TEMPLATE、ITEM_DESC、ITEM_UOM、UNIT_WEIGHT、ORG、FLAG、在庫)SELECT * ''ITEM_NUMBER = APPS.CUX_PDM_ITEMS_BOM_VからITEM_NUMBER、ITEM_TYPE、ITEM_DESCRIPTION、PRIMARY_UOM_CODE、UNIT_WEIGHT、ORGANIZATION_CODE、LOT_FLAG、Inventory_Item_Status_Codeを選択   '' '' ' + @itemid + ''''' ' 
    EXEC(@TSQL)
    次のフェッチからauth_cur @itemidに
  エンド


近いauth_cur 


DEALLOCATE auth_cur

 

おすすめ

転載: www.cnblogs.com/tc310/p/11106884.html