2011-02-03 136 views
4

儘可能考慮這個理論問題。MySQL巨大的IN設置爲巨大的表

其中有一張表格,例如用戶數量爲1.000.000以上的記錄,並且需要爲該表格中的50.000個數據提取數據,僅使用user_id。你如何期望IN行爲?如果不好,是唯一的選擇還是還有別的方法可以嘗試?

回答

2

IN功能其實性能相當差,所以這是我會避免的。大多數情況下,您可以通過使用聯合查詢來解決問題,因此根據數據庫結構,您應該明確支持通過IN語句進行聯接。

+3

認爲你在IN(value1,value2,...)中混淆了IN(SELECT ...)`,第一個實際上是因爲速度慢而臭名昭着第二個然而,一個正在被扭轉聽着一系列`OR`s,我不認爲你可以說`OR`s很慢。 – Mchl 2011-02-03 19:27:23

-1

使用JOIN選擇您需要的數據。

3

您可以將您的搜索值插入單列臨時表並加入。我看到其他數據庫在出現非常大的子句時會做壞事。

+0

嗯。我不明白這是怎麼可能的。 `user_id`是唯一的,並且是where條件。他也沒有詳細說明其他條件。那麼你將如何複製和加入?你能否用一個例子解釋一下? – 2011-02-03 13:07:29

0

如果在開始證明麻煩(其他應答者都建議說,你可以嘗試重寫使用您的查詢存在代替。

SELECT * 
    FROM MYTAB 
    WHERE MYKEY IN (SELECT KEYVAL 
         FROM MYOTHERTAB 
         WHERE some condition) 

可能成爲

SELECT * 
    FROM MYTAB 
    WHERE EXISTS (SELECT * 
         FROM MYOTHERTAB 
         WHERE some condition AND 
          MYTAB.MYKEY = MYOTHERTAB.KEYVAL) 

我常常發現這加快速度提高了一點點