【问题标题】:DB design advice wanted需要数据库设计建议
【发布时间】:2014-10-22 06:41:56
【问题描述】:

我正在寻找有关我正在从事的设计的一些建议。是这样的:

我有一个包含会议表和用户表的数据库。每个会议都有一个组织者,它对应于用户表中用户的 ID。此时非常简单。

现在通过 facebook api,我得到了每个人的朋友列表。我想在我的数据库中搜索我的朋友组织的会议。我首先想到的只是查询中的一个简单 IN('list of friends'),但我可以想象这会破坏性能。

现在的想法是创建一个包含用户 ID 和朋友 ID 的额外表,并将其加入查询中。

有人对什么表现最好有一些建议吗?当然,其他解决方案非常受欢迎;)

谢谢

没有

PS。 MySQL数据库

【问题讨论】:

  • “但我可以想象这会扼杀性能。” --- 只是想象力还是知识?
  • 嗯,我知道一个 IN 语句经常被数据库重写为一堆 OR 语句,所以在我的想象中这对性能来说不是一件好事。这就是我在这里寻求建议的原因,我不确定;)
  • 对于性能问题,通常最好(或唯一)确定的方法是在实际生产负载下进行双向测试,看看会发生什么。数据库查询优化器非常复杂,很难预测它们会做什么。

标签: mysql sql database facebook database-design


【解决方案1】:

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

MySQL 因没有很好地优化INs 而臭名昭著,因此人们倾向于默认使用JOIN。其他 DBMS 通常没有这样的限制。最好自己测试一下性能,on representative amounts of data,看看你是否真的有问题。

顺便说一句,无论如何,您都需要一个会议和用户之间的联结表 - 毕竟,如果会议不能有多个参与者,那么会议的目的是什么?如果组织者也应该被视为参与者,您可以这样做:

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2020-04-22
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多