Facebook API有一个电话$ facebook-> api_client-> friends_getAppUsers();并返回正在使用该应用程序的用户的朋友ID。
现在说我想从我的db表中选择与 all 那些朋友ID匹配的所有行。
我能想到的唯一方法就是
SELECT * FROM my_table WHERE uid IN(friend1,friend2,friend3,friend4 ... friend100);
但这种选择难道不会令人望而却步吗?还有另一种方法可以达到同样的目的吗?这应该是facebook应用程序中非常常见的事情。
如果您查看“原因”应用程序,它可以让您查看朋友的原因。我猜测应用程序必须从Cause表中挑选出与所有用户ID匹配的所有行。
我是以错误的方式解决这个问题吗?
答案 0 :(得分:2)
如果您在uid
上没有索引,查询分析器将对my_table执行表扫描并根据朋友列表测试每一行(将其视为只在每个行上执行的if语句的级联行)。所以它的成本与以下相同:
SELECT * FROM my_table;
现在,如果您在uid
上创建索引,如果正在测试的朋友集相对较大,查询分析器仍可能会进行表扫描。如果列表中的朋友相对较少,则可以通过uid进行单独查找。在现实数据集上运行一些实验,看看会发生什么。您可以通过在EXPLAIN
前加上查询来向MySQL询问任何查询计划。