php订阅者sql查询太大了?

时间:2012-02-21 12:16:03

标签: php mysql sql

在我的应用程序中,您可以订阅用户以获取他们的更新等...但是,如果您允许说订阅2000人,查询将会太大而我不知道它是否会工作/崩溃或者是正确的方式...

这是一个使用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多个订阅?

是走的路还是以另一种方式做得更好?

2 个答案:

答案 0 :(得分:5)

在1000多个订阅中,这将非常缓慢。你想要做的是创建一个链接表UserSubscriptions或类似的东西。在该表中,您可以存储您的用户ID和订阅的ID。在您的查询中,您可以加入这两个表。

答案 1 :(得分:1)

对于您的具体示例,应假设以下内容

  1. uid字段为INT
  2. 你有一个索引在更新时指定为(uid,date)(如果uid是PK,请忽略它并且只有订购的日期索引)
  3. 错误查询 -

    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