2017-01-08 6 views
0

以下のクエリは他のユーザーによって作成されていますが、パフォーマンスが向上する必要があります。私にもっと良い方法を提案してもらえますか?クエリのパフォーマンスの問題 - ではない

Select * from ps_vendor G where G.vendor_id NOT IN (SELECT vendor_id 
           FROM ps_voucher_line 
           WHERE vendor_id <> '70830' 
             AND cntrct_id <> ' ' 
             AND vendor_id NOT IN (SELECT vendor_id 
                  FROM ps_cntrct_hdr 
                  WHERE 
              cntrct_type = 'AP')) 

答えて

0

インナーにしてみてくださいは

Select G.* from ps_vendor G 
     inner join ps_voucher_line pvl 
      on G.vendor_id = pvl.vendor_id and pvl.vendor_id <> '70830' 
     inner join ps_cntrct_hdr pch 
      on (pch.vendor_id <> pvl.vendor_id and pch.cntrct_type = 'AP') 
    where pv.cntrct_id <> ' ' 

の下に表示のように条件を結合条件に参加するにはさまざまなバリエーションを試してみてください!

結果を確認するサブクエリがあります。

+0

パフォーマンスを向上させたが、修正する必要のある余分な行を戻す左外部結合を追加して、この変更を行いました。 G.vendor_id NOT IN(SELECT がps_voucher_lineのLEFT OUTER JOINのps_cntrct_hdrトンON s.cntrct_id = t.cntrct_id s.vendor_id <> '70830' とs.cntrct_id '' ' AND t.cntrct_type =' AP ' – Lajbanti

+0

左の結合条件の余分なレコードは、結合条件でもNULLチェックを入れることで簡単に削除できます。 –

+0

私はnull条件を使用しましたが、余分な行を与えています。何か間違っている場合は教えてください – Lajbanti

関連する問題