2012-07-24 84 views
0

我知道SQL IN子句中有1000項限制。 目前,我在選擇查詢的「IN」子句中使用逗號分隔的一串項目,我想對其進行更改。SQL IN逗號分隔參數與內部查詢

所以,我發現this,其中規定使用JOININ本身內部傳遞查詢。

哪一個應該是首選?

EDIT(另一個問題):

是什麼在「IN」條款經過查詢,並通過逗號分隔參數「IN」條款的區別?

+4

數據庫優化器將以相同的方式執行這兩個變體。你可以使用看起來更好的那個。 :) – Andomar 2012-07-24 06:33:25

+2

你**實際上是**在一個'in'子句中使用包含1,000個以逗號分隔的項目的查詢嗎? 0_0 Srsly,把他們放在一張桌子上,並適當地加入。 – 2012-07-24 06:52:10

+0

@JackManey:不是現在,但將來有機會。 – 2012-07-24 08:11:10

回答

1

數據庫優化器將以相同的方式執行這兩個變體。你可以使用看起來更好的那個。 :)

0

當您在「In子句」中輸入查詢時,數據庫需要首先計算此查詢,並根據結果calc計算「主查詢」。 如果您將值放入「In子句」中,則數據庫dost需要計算其他查詢。

由於擔心在in子句中針對查詢進行連接,數據庫會將它們優化爲相同。

+0

所以,你的意思是說把價值觀而不是查詢? – 2012-07-24 12:17:52

+0

從清晰的性能角度來看,由於其執行附加查詢所需的dosnt值更快,但性能不是唯一的角度。如果差異爲1毫秒,1毫秒對您來說可以忽略不計,那麼請採取清除方法。 – 2012-07-24 12:36:14

+0

當你有更少的值但是當值大於1k時,它是真的,那麼SQL本身對IN子句有限制。所以,這不是我尋找的解決方案。 – 2012-07-24 16:40:09