儘可能考慮這個理論問題。MySQL巨大的IN設置爲巨大的表
其中有一張表格,例如用戶數量爲1.000.000以上的記錄,並且需要爲該表格中的50.000個數據提取數據,僅使用user_id。你如何期望IN行爲?如果不好,是唯一的選擇還是還有別的方法可以嘗試?
儘可能考慮這個理論問題。MySQL巨大的IN設置爲巨大的表
其中有一張表格,例如用戶數量爲1.000.000以上的記錄,並且需要爲該表格中的50.000個數據提取數據,僅使用user_id。你如何期望IN行爲?如果不好,是唯一的選擇還是還有別的方法可以嘗試?
IN功能其實性能相當差,所以這是我會避免的。大多數情況下,您可以通過使用聯合查詢來解決問題,因此根據數據庫結構,您應該明確支持通過IN語句進行聯接。
使用JOIN選擇您需要的數據。
您可以將您的搜索值插入單列臨時表並加入。我看到其他數據庫在出現非常大的子句時會做壞事。
嗯。我不明白這是怎麼可能的。 `user_id`是唯一的,並且是where條件。他也沒有詳細說明其他條件。那麼你將如何複製和加入?你能否用一個例子解釋一下? – 2011-02-03 13:07:29
如果在開始證明麻煩(其他應答者都建議說,你可以嘗試重寫使用您的查詢存在代替。
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)
我常常發現這加快速度提高了一點點
認爲你在IN(value1,value2,...)中混淆了IN(SELECT ...)`,第一個實際上是因爲速度慢而臭名昭着第二個然而,一個正在被扭轉聽着一系列`OR`s,我不認爲你可以說`OR`s很慢。 – Mchl 2011-02-03 19:27:23