2017-06-01 17 views
0

私のストアドプロシージャの下のクエリにはより多くの時間がかかります。これ以下のクエリを最適化する方法はありますか?入力パラメータは名前とCAです。SQLサーバークエリの最適化

SELECT @E_ID=vb.e_id 
FROM VALUES va, mappings im, VALUES va2 
WHERE im.pv_name=vb.value 
AND va.E_ID in (select e_id from listings where id = 200) 
AND va.f_id=100 
AND va2.f_id=101 AND va.e_id=va2.e_id 
AND im.w_i_name='"'[email protected]+'"' AND va2.value='["'[email protected]+'"]' 
ORDER BY va.e_id 
+0

あなたはどの操作コストどのくらい見てあなたはUSIあるどのDBMS – DotNetDev

+0

を最適化することができるよりもそこに、実行計画に見ている必要がありng? –

答えて

0

一般的な意見に反して、IN/EXISTSクエリはSQL ServerのJOINクエリよりも効率的ではありません。しかし、JOIN問合せは、索引付けされていない表では効率が悪いです。私はわからないんだけど、あなたはこれを次のように変更することができます。

SELECT @E_ID=vb.e_id 
FROM VALUES va, mappings im, VALUES va2 
join (select e_id from listings where id = 200) tmp on tmp.e_id = va.E_ID 
WHERE im.pv_name=vb.value 
0

私はどうしたらまず最初に確認してくださいBY句WHERE句とORDER中で言及したすべての単一のフィールドがインデックス化されていることであるようにすることです。

私はどうしたら二つ目は、次のことを試してくださいです:(。クエリオプティマイザは、このの世話をしない場合、私は驚くだろうけど)

... 
LEFT JOIN listings on va.E_ID = listings.e_id WHERE listings.id = 200 
... 

私はどうなる3つ目次のことを試してくださいです:

... 
(SELECT * FROM VALUES WHERE f_id=100) va, 
(SELECT * FROM VALUES WHERE f_id=101) va2, 
...