Mysql 什么表结构可以提供更快的sql查询结果

Mysql 什么表结构可以提供更快的sql查询结果,mysql,sql,database,performance,optimization,Mysql,Sql,Database,Performance,Optimization,我想制作一个表,在我的应用程序中将用户的操作反映给另一个用户 我有两个解决方案,我想知道什么会更快 (一) 在此选项中,我将为每个操作创建一行 (二) 在此选项中,我将为其他用户可用的所有操作创建一行, 未执行操作时,该字段将设置为空值 仅当至少执行了一个操作时,才会创建此行 你能帮我理解为什么最好的选择是 请原谅我英语不好 谢谢绝对不是第二位。我会选择一款经过修改的第一款: ID | source_user_id | target_user_id | **action_id** 然后制作一个

我想制作一个表,在我的应用程序中将用户的操作反映给另一个用户

我有两个解决方案,我想知道什么会更快

(一)

在此选项中,我将为每个操作创建一行

(二)

在此选项中,我将为其他用户可用的所有操作创建一行, 未执行操作时,该字段将设置为空值 仅当至少执行了一个操作时,才会创建此行

你能帮我理解为什么最好的选择是

请原谅我英语不好

谢谢

绝对不是第二位。我会选择一款经过修改的第一款:

ID | source_user_id | target_user_id | **action_id**
然后制作一个表
actions

ID | action_type | action_info | etc

这将允许您执行多个不同的操作,并且更加灵活。您说过,“我将为其他用户可用的所有操作创建一行”……但是,根据您的布局,您真正的意思是您将为用户之间可用的每个操作创建另一列。这是一种非常糟糕的处理方法。

在定义表结构之前,首先必须确定哪些预期查询对性能至关重要?是否为
目标用户
获取所有可用的
操作
s?或者它是否可以获取您的系统中当前可用的
操作类型
s的数量?相应地,表格的构建方式可能会有很大的不同

确定好后,您可以使用多种技术来构建针对您的需求进行优化的表格,例如:

  • 将通常一起检索的数据单元嵌入到同一个表中
  • 索引列
  • 这里的前两个是最基本的

  • 为什么会更快

    为了获得特定用户的所有操作,第二个解决方案应该更快,尽管这可能只是一小部分

    对于在中添加新操作,第一个解决方案要快得多。第二种解决方案需要重新组织表

    接下来,对于第二种情况,您不需要在列中说明您要输入的内容。如果您输入的字符串长度为2000个字符,那么第一种情况可能会快得多,特别是hellohellosharp建议使用ID而不是值。较短的记录和减少的I/O应该可以弥补必须将一个大表连接到一个小参考表的不足


    因为您没有提供足够的信息来实际回答有关性能的问题,所以最好的答案是关注数据库设计。为此,一个操作表可能应该有一个自动递增的id、两个用户id、一个操作id和一个日期/时间字段来表示它发生的时间。使用适当的索引,获取有关特定用户或用户/操作的信息对于您的应用程序来说应该有足够好的性能。

    主要问题是您不知道如何自己衡量这一点。我不知道mysql,但我可以想象很多进行性能测试的方法。一个可能且简单的解决方案是DoAsk google。然而,在我看来:#2更快,因为它避免了
    连接。但在我记忆中,is是一种非常愚蠢的表结构设计方法,因为它违反了3ND。主要问题是为了性能而牺牲正确性。速度致命。对速度的需求会造成更大的损失。你解释了所有可能的情况,我对从我的用户表中选择和加入感到谨慎,因为这会发生更多,我会在action_x,action_y,action_zmy中输入一个日期。主要操作是获取我在搜索用户时对其他用户执行的操作,并列出我对其执行操作的用户。
    
    ID | source_user_id | target_user_id | **action_id**
    
    ID | action_type | action_info | etc