2013-02-01 17 views
0

是否讓它執行更好的整體到WHERE IN打破this成許多選擇e.g打破凡在成多個SELECTS

 
SELECT aField FROM aTable WHERE objectId IN (0,1,2...999) * many

相比具有巨大的WHERE OBJECTID IN(700K項目)。

編輯---

的ObjectID我已經在內存中,也可以是多達70萬項的列表。他們可以是連續的,但不太可能。 這也不是行列式中的where子句(本例中是objectId)是否被索引的決定因素。

允許我僅傳遞WHERE CLAUSE的第三方應用程序當前正在使用Oracle DB。它也有連接到其他類型數據庫的選項,但我正在開發的插件的用戶羣主要針對Oracle數據庫。

+0

你從哪裏得到objectid的?另一個查詢? –

+2

如果這個數字是連續的,那麼'BETWEEN'也可能是你的一個解決方案。 –

+0

我編輯了這個問題來回答評論@JoachimIsaksson和Blausocke – leon

回答

0

它更好地閱讀,但更難調試,內部它會是有趣的,哪一個更快,通常我會說與ObjectID列表的選項,但傳輸如此龐大的數據量的一些性能也是,你可以根據我們的DBMS使用解釋計劃來比較兩種變體。

0

多達700k項目?如果是這種情況,我會認真考慮將它們存儲在一個單獨的表中,並使用JOIN來代替 - 如果objectId是一個索引外鍵,那麼這會更好。

+0

抱歉只編輯了這個問題。第三方應用程序只允許我訪問WHERE CLAUSE,它構造了整個sql語句,至今我還沒有控制權。 – leon

+0

哦,在這種情況下,我會和@ Blauesocke的建議一起使用BETWEEN(或<=, > =)來減少子句,只要有連續的ID塊就行。 –

+0

我可以考慮將它們排序爲連續的ID塊,但似乎我的選項是_very_限制,只要我只能訪問WHERE子句。 – leon