2009-11-29 35 views
1

Facebook API有一個調用$ facebook-> api_client-> friends_getAppUsers();並返回正在使用該應用程序的用戶的朋友ID。MySQL性能問題 - 很多ORing

現在說我想從我的數據庫表中選擇匹配的所有行全部這些朋友ID。

我能想到這樣做會

SELECT * FROM MY_TABLE的唯一方法其中uid IN(朋友1,FRIEND2,friend3,friend4 ... friend100);

但是這樣不會選擇通過禁止,表現明智嗎?有沒有另外一種方法來實現同樣的目標?這應該是在facebook應用程序中很常見的事情。

如果你看看原因應用程序,它可以讓你看到你的朋友的原因。我猜應用程序將不得不挑選匹配所有用戶標識的來源表中的所有行。

我該怎麼做呢?

回答

2

如果在uid上沒有索引,查詢分析器將對my_table執行表掃描,並根據朋友列表測試每行(將其視爲僅在每行上執行if語句的級聯)。所以,它是關於那樣難:如果您創建uid索引

SELECT * FROM my_table; 

現在,查詢分析器可能還是表掃描,如果被測試的一組的朋友對是比較大的。如果列表中的朋友相對較少,則可以通過uid進行單獨的查找。在現實的數據集上運行一些實驗,看看會發生什麼。您可以通過爲查詢添加EXPLAIN的前綴來向MySQL詢問任何查詢計劃。

+0

謝謝你。我一定會嘗試EXPLAIN前綴 – helloworlder 2009-11-29 09:05:16