2012-02-21 68 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