MySQL中有成千上万个OR语句(好主意吗?)

5

我正在开发一款Twitter应用程序,它可以获取用户的全部关注者并获得他们的特定 id 例如:1223455

同时,我还有一个包含特定 Twitter id 的巨大数据库...请查看行中的示例...

|1| 122345   |
|2| 2232144  |
|3| 99653222 |
|4| 123232   |
|5| 2321323  |
|6| 3121322  |

问题在于我们都知道 Twitter 是关于拥有更多的粉丝(成千上万),我想知道这是否是一个好的 MySQL 查询语句,可能需要在一次脚本运行中运行多达 20 次...

SELECT * FROM table WHERE twitterID='132323' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123

不断地循环,可能会在单个查询中出现超过1,000个OR语句(类似的查询可能被调用20次)。

这似乎不是很好的编程实践,但我没有听说过其他方法...??


你使用过 IN 关键字吗? - hmmftg
我看到你接受了“in”列表的答案。这是完全合理的,但你应该考虑将ID保留在表中并使用连接(或in)的版本。在某些时候,你可能会遇到编译问题甚至查询长度问题。 - Gordon Linoff
3个回答

6
使用in指定符:
Select * from table where twitterid in (123,456,789,...)

这个想法还好吗...会非常慢吗? - The Man
1
你有这个字段_twitterID_的索引吗? - Gabriel Sosa
它将比ors更快。我能想到的另一个建议是,如果您经常查找数字组,则使用视图。 - Mike Mackintosh
不,我没有索引...那有帮助吗? - The Man
但它不是自动递增的,而且我已经设置了一个ID列。 - The Man
没问题。你仍然可以在那个列上创建一个索引,不一定要自动递增。只是不要将其分配为唯一或主键。 - Mike Mackintosh

4

这确实是一个非常糟糕的想法。MySQL不能很好地优化OR语句。

使用JOIN或类似的东西会更好得多。

WHERE twitterId IN (
      select * 
        from followers
       where followee = whatever
)

0

试试这个:

SELECT * 
FROM table t1
WHERE twitterID 
      IN (select twitterID 
            from twitterIDsTable t2
           where t1.twitterID = t2.twitterID)--for performance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接