2014-08-28 98 views
0

我正在寻找一些关于我正在工作的设计的建议。这是这样的情况:DB设计建议想要

我有一个会议桌和用户表的数据库。每次会议都有一个组织机构,对应于用户在使用中的ID。 Verry在这一点上很简单。

现在通过facebook api我得到每个人的朋友列表。我想在我的数据库中搜索我的朋友组织的会议。我想到的第一件事就是查询中的一个简单的IN('朋友列表'),但我可以想象这会导致性能下降。

现在的想法是制作一个包含userID和friendID并加入查询中的表。

有人对什么性能最好有一些建议。其他的解决方案着,当然,更受欢迎;)

THX

ň

PS。 MySQL DB

+1

“但我能想象这是杀人的性能。” ---它只是想象力或知识吗? – zerkms 2014-08-28 11:58:51

+0

嗯,我知道一个IN语句经常被DB重写为一堆OR语句,所以在我的想象中这对性能并不是好事。这就是为什么我在这里要求建议,我不知道肯定;) – NCS 2014-08-28 12:04:36

+0

性能问题通常是最好的(或唯一的)方式来确定是在现实生产负载下测试它,看看会发生什么。数据库查询优化器非常复杂,很难预测他们会做什么。 – 2014-08-28 12:09:31

回答

1

IN这里不是一个基本问题。但是,如果给定的DBMS优化器不是很好并且不能产生最佳的查询计划,那么这可能是一个实际问题。但在这种情况下,您通常可以重新编写查询以使用不同的语法(例如JOIN),它们可以实现相同的功能,但允许优化程序生成更好的计划。

MySQL由于没有优化INs而臭名昭着,所以人们默认使用JOIN。其他DBMS通常不具有这样的限制。最好自己测试性能,on representative amounts of data,看看你是否真的有问题。

顺便说一句,无论如何,你需要一个会议和用户之间的交接表 - 毕竟,如果一个会议不能有多个参与者,会议的目的是什么?如果组织者也应考虑的参与者,你可以做这样的事情:

enter image description here