当前位置: 首页 > 面试题库 >

带有40多个列的mysql表

闻人锦
2023-03-14
问题内容

我的桌子上有40多个列,我还需要添加一些其他字段,例如当前的城市,家乡,学校,工作,大学,拼贴画。

对于作为共同朋友(与其他用户朋友一起加入朋友表以查看共同朋友)并且未被阻止并且还尚未与该用户成为朋友的许多匹配用户,将提取这些用户数据。

上面的请求有点复杂,所以我认为将额外的数据放在同一用户表中以进行快速访问是个好主意,而不是向该表中添加更多的联接,这将使查询速度变慢。但是我想得到你的建议

我的朋友告诉我添加额外的字段,这些字段不会在一个字段中作为序列化数据进行搜索。

ERD图:

  • 我当前的表格:http : //i.stack.imgur.com/KMwxb.png
  • 如果我加入更多表格:http : //i.stack.imgur.com/xhAxE.png

一些建议

  1. 该表和列没有错
  2. 遵循这种方法MySQL:优化具有许多列的表-将多余的字段序列化为一个不可搜索的字段
  3. 创建另一个表,并将大部分数据放在该表中。(如果我已经有3个或更多表要联接以为用户(例如,朋友,用户,检查共同的朋友)拉动记录,则联接将变得更加困难。

问题答案:

像往常一样-这取决于。

首先,MySQL可以支持的最大列数是您真正不想要的。

其次,如果您有很多带有索引的列,则在插入或更新时会对性能产生影响(尽管我不确定这在现代硬件上是否很重要)。

第三,大表通常是似乎与核心实体有关的所有数据的转储场。这很快使设计不清楚。例如,您呈现的设计显示了3个不同的“状态”类型字段(状态,is_admin和fb_account_verified)-我怀疑应该将某些业务逻辑链接在一起(例如,管理员必须是经过验证的用户),但是您的设计不支持这一点。

这可能是问题,也可能不是问题-
与其说是性能/是否可行,不如说是概念,体系结构/设计问题。但是,在这种情况下,即使它没有多对多关系,您也可以考虑创建表以反映有关该帐户的相关信息。因此,您可以创建“
user_profile”,“ user_credentials”,“ user_fb”,“
user_activity”,并通过user_id进行链接。这使其变得更整洁,并且如果您必须添加更多与Facebook相关的字段,则它们不会在表的末尾悬垂。但是,它不会使您的数据库更快或更可扩展。联接的成本可能微不足道。


无论您做什么,选项2(将“很少使用的字段”序列化为单个文本字段)都是一个糟糕的主意。您无法验证数据(因此日期可能无效,数字可能是文本,可能会丢失非null),并且在“
where”子句中的任何使用都变得非常慢。

流行的替代方法是“实体/属性/值”或“键/值”存储。此解决方案有一些好处-
即使架构发生更改或在设计时未知,您也可以将数据存储在关系数据库中。但是,它们也有缺点:很难在数据库级别验证数据(数据类型和可空性),很难使用外键关系与其他表进行有意义的链接,并且查询数据可能会变得非常复杂-
想象找到所有记录状态为1且facebook_id为null且注册日期大于昨天的记录。

考虑到您似乎了解数据的架构,我认为“键/值”不是一个好选择。



 类似资料:
  • 问题内容: 我想要一个有两列的表。一栏用于记录的创建时间,另一栏用于记录的修改时间。我希望这些值由数据库处理。我不想让我的应用程序层考虑一下。 我知道,如果您有一个带有或的列,那么您将无法拥有另一个列。您可以使用,但没有办法在触发器之外默认它,据我所知。 我发现您可以具有多个列,方法是将每个列不带或保留,并在创建记录时插入,以使每个列具有当前时间戳。从这一点开始,第一列将自动更新。 这个效果非常好

  • 我正在尝试将所有MySQL连接从旧的MySQL_查询切换到PDO。我试图使用不同的数组更新MySQL表的多个行和列,收到以下错误: [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取正确的语法,以便在第1行中使用接近(accnt、car、radio、misc)值('admin'、'300.00'、'400.00'、'10.00'),其中

  • 问题内容: 我们都知道python的 句法。 但是,列表理解的 AST表示可以容纳多个’if’表达式: 有人可以给我一个python代码示例,该示例会生成带有多个“ if”表达式的AST吗? 问题答案: 只需将它们一个接一个地堆叠: 产生介于11和49之间(含)的整数。

  • 问题内容: 我有一个简单的查询: 我得到这样的输出: 但我需要这样的输出: 提前致谢。 问题答案: 我发现使用GROUPING SET子句指定所需的确切集合要容易得多: 我怀疑它会更有效,因为它直接指定要计算的级别。 http://sqlfiddle.com/#!4/8301d/3 CUBE和ROLLUP对于自动生成大量聚合级别(例如,维度层次结构中的每个级别)非常方便,如果您想从生成的大型CUB

  • 非常类似于使用PDO数组更新多个MySQL表列。 但是我使用了一个复杂的形式 更新只是给我一个没有错误的空白页??? 注意:使用了MySQLi,工作正常,只是更新到了PDO。 $data2返回了正确的数组。 这可能是订单吗?IE输出必须匹配列顺序? 分析了使用带有PDO的数组和https://guwii.com/bytes/update-multiple-database-columns-usin

  • 问题内容: 我需要构建一个具有多个窗口的应用程序。在其中一个窗口中,我需要能够玩一个简单的游戏,而另一个窗口必须显示问题并获得影响游戏的用户的响应。 (1)我想使用pygame来制作游戏。有一种 简单的 方法可以让pygame在多个窗口中运行吗? (2)如果没有简单的方法可以解决(1),是否有一种简单的方法来使用其他一些Python GUI结构,从而允许我同时运行pygame和另一个窗口? 问题答