2017-06-01 89 views
0

我在我的存儲過程中查詢需要更多時間。是否有任何方法可以優化下面的query.Input參數是Name和CA.在sql server查詢中優化

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 – DotNetDev

+0

哪個DBMS 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

我會做的第一件事是要確保的是,任何一個領域中的WHERE子句和ORDER BY子句是索引提及。

我會做的第二件事是請嘗試以下操作:

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

(雖然我會感到驚訝,如果查詢優化器不會照顧這)

的第三件事我會做正在嘗試以下操作:

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