首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化表结构

优化表结构
EN

Stack Overflow用户
提问于 2020-11-20 18:58:47
回答 2查看 54关注 0票数 0

拥有200万用户。每个用户都可以订阅3项服务。在这种情况下,想知道哪种结构会更好。

  1. 为一个用户在表中存储一行,为每个服务存储更多的字段(
  2. Store),为每个服务存储三行,在本例中将拥有较少的字段,但具有更多的数据

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-20 19:07:43

表结构取决于将要执行的查询类型,即如何选择数据,是否需要索引选择。如果您预期每个邮件列表将至少有10%的用户订阅,那么您可能不会从索引中获得很大的收益,并且您可以只创建一个整数列,当每个邮件列表将有一个自己的位(2^N)时,例如:

代码语言:javascript
复制
SELECT * FROM Subscriptions WHERE (MailingListFlags AND 8) <> 0;

代替4 put 2或1取决于您需要的位,其中1=第一位,2=第二位,4=第三位,8=第四位,等等。

这种逻辑和操作将不允许您有效地使用索引。但是,如果您希望逐个选择邮件列表,则只有在结果数量较低时才能从索引中获得好处,例如,在用户总数中不到10%。然后为每个邮件列表创建布尔列。但这种结构不会很灵活。如果需要创建新的邮件列表,则需要添加新列。一种更灵活的方法是为每个用户表示一个整数ID (其他用户数据,如名称和电子邮件将存储在不同的表中)和每个邮件列表。因此,您将只有两个整数列,但用户ID列并不是唯一的,例如,如果用户1订阅列表2和3,用户2订阅列表1、3和4,表将如下所示

代码语言:javascript
复制
User | List
===========
   1 |    2
   1 |    3
   2 |    1
   2 |    3
   2 |    4
票数 1
EN

Stack Overflow用户

发布于 2020-11-20 19:07:12

你应该用两张桌子。一个用于用户,一个用于服务,在服务中有一个引用用户Id的列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64935345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档