2012-02-21 36 views
0

在我的應用程序中,您可以訂閱用戶以獲取他們的更新等等......但是如果您允許說訂閱2000人,則查詢將會太大,並且我不知道它是否會工作/崩潰或是正確的路要走......php訂閱sql查詢太大?

這是與用戶的15個訂閱和他的自我運行查詢:

SELECT * FROM updates WHERE uid='433154988124' || uid='643474995854' || 
    uid='841341889862' || uid='231955782795' || uid='763438359221' || 
    uid='232345661645' || uid='786313664389' || uid='311617571586' || 
    uid='895988518181' || uid='576877484624' || uid='119448961897' || 
    uid='963671595174' || uid='342987961447' || uid='259688255351' || 
    uid='746656932975' || uid='716846928846' ORDER BY date DESC LIMIT 0, 15 

那麼告訴我,這將有1000+和更多的訂閱工作?

難道這樣走還是走另一條路更好?

+0

這不是正確的方法。您的訂閱在哪裏保存?你應該考慮加入選擇。 – Marc 2012-02-21 12:19:23

+0

他們保存在另一個名爲subscribers的表...所以另一種方法是加入他們而不是提取ID並將它們添加到SQL查詢字符串中。 – fxuser 2012-02-21 12:20:55

+1

是的,就是這樣。裏克胡克也提到它。 – Marc 2012-02-21 12:23:22

回答

1

爲了您的具體的例子,下面應該假設

  1. uid字段是INT
  2. 你有一個索引指定爲(UID,日期)更新(如果UID是PK,忽略此,只是有訂貨的日期索引)

壞查詢 -

SELECT * FROM updates 
WHERE uid IN (
    433154988124, 
    643474995854, 
    841341889862, 
    231955782795, 
    763438359221, 
    232345661645, 
    786313664389, 
    311617571586, 
    895988518181, 
    576877484624, 
    119448961897, 
    963671595174, 
    342987961447, 
    259688255351, 
    746656932975, 
    716846928846, 
) ORDER BY date DESC LIMIT 0, 15 

當人儘管如此,鏈接表將會是一種更有效的方法,以便您可以運行這個更好的查詢。

SELECT updates.* 
FROM updates 
INNER JOIN users_subscriptions 
ON users_subscriptions.uid = updates.uid 
ORDER BY updates.date DESC LIMIT 0, 15 
5

這會在1000+訂閱時很慢。你想要做的是創建一個鏈接表UserSubscriptions或類似的東西。在該表中,您可以存儲您的用戶ID和它訂閱的ID。在你的查詢中,你可以加入這兩個表。

+0

絕對是更好的方法... – DRapp 2012-02-21 12:22:30