2010-08-04 82 views
3

在我的web應用程序中,我想知道哪些Twitter用戶的朋友已經存在於系統中...目前我所做的是獲取用戶所在的Twitter ID列表以下特(Twitter API返回的ID 5000在時間),這樣做的:SELECT IN for a large set

SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs); 

我覺得不舒服這個查詢,因爲表的增長的用戶來說,這可能被證明是一個瓶頸。我不想過早優化,那麼還有其他方法可以做到這一點嗎?

更新:我正在使用MySQL。

+1

您使用的數據庫是? – 2010-08-04 17:03:37

+0

你真的是指*多少*或你的意思是*哪個*? – 2010-08-04 17:06:14

+0

我的意思是,編輯了這個問題。 – jack33 2010-08-04 17:09:59

回答

2

您可以創建一個新表,並開始存儲用戶所關注的所有推特ID。然後,確定誰已經在您的系統中將是索引列上的簡單連接。您可以使用Twitter API自行加載和更新該表。

+0

創建一個臨時表,執行連接然後刪除它比使用SELECT IN(expr)其中expr可能有多達5000個值更好的開銷?我目前沒有必要永久保留下表。 – jack33 2010-08-04 17:17:10

+0

我不建議在每次檢查時都發生臨時表選項,但歡迎您進行測試,看看它是如何執行的。雖然你不需要永久存儲後續數據,但我認爲你會發現沒有什麼理由不堅持它。 – Fosco 2010-08-04 17:27:01

3

兩種方法:

  1. SELECT IN (expr)能夠有一個SELECT表達式expr。即數據庫可以在這裏處理大量的數據。

  2. 使用連接。

1

我假設users.userId是您的主鍵。如果是這樣,它已經被索引,所以查找應該已經很有效率。你期望你的COMMA_SEPARATED_LIST_OF_IDS會超越理性嗎?

+0

Twitter會在5k批次中提供userIds,以防用戶跟隨超過5000人。所以,COMMA_SEPARATED_LIST_OF_IDS最多可以有5000個ID。 – jack33 2010-08-04 17:11:27

相關問題