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

mysql-创建行与列的性能

章绪
2023-03-14
问题内容

我建立了一个分析引擎,可以从数据库中提取50-100行原始数据(称为raw_table),在PHP上对其进行一堆统计测量,然后精确给出140个数据点,然后将它们存储在另一个表中(让我们称之为results_table)。所有这些数据点都是非常小的整数(“
40”,“ 2.23”,“-1024”是数据类型的很好的示例)。

我知道mysql的最大列数非常高(4000+),但是当性能真正开始下降时,似乎有很多灰色区域。

这里有一些关于最佳性能实践的问题:

1)如果更好的话,可以将140个数据点分成20行,每行7个数据点,experiment_id如果列数越少越好,它们都具有相同的’
‘。但是,我总是需要拉全部20行(每个7列,加上ID等),所以我认为这不会比拉1行140列更好。那么问题来了:存储20行7-9列(都需要一次拉出)还是1行140-143列更好?

2)考虑到我的数据示例(“ 40”,“
2.23”,“-1024”是将要存储的数据的好示例),我正在考虑smallint结构类型。是否有任何反馈,无论是性能方面的反馈?

3)欢迎对mysql性能问题或技巧提出任何其他反馈。

预先感谢您的输入。


问题答案:

我认为存储更多行(即规范化)的好处取决于面对变更时的设计和维护注意事项。

同样,如果140列的含义相同或每个实验是否不同-根据归一化规则正确建模数据-即数据与候选关键字的关系如何。

就性能而言,如果使用所有列,则差异很小。有时,枢轴/非枢轴操作在大量数据上可能会很昂贵,但对单个键访问模式的影响却很小。有时,面对变化,数据库中的枢轴可以使您的前端代码更简单,后端代码更灵活。

如果您有很多NULL,则有可能在规范化设计中消除行,这将节省空间。我不知道MySQL是否支持稀疏表概念,该概念可能在那里发挥作用。



 类似资料:
  • 例如,假设我有以下带有行的dataframe: 进一步假设我希望创建一个新列,作为两列和的函数。在下面的示例中,我将使用一个简单的函数。要应用该函数,可以使用或: 如果我将的实际大小增加到100万或更多,那么我会发现比快25倍或更多。 我如何使用Pandas的‘应用’功能多列? 如何将函数应用于Pandas数据帧的两列

  • 问题内容: 我正在尝试在MySQL中创建序列(从整体上来说,我对SQL还是很新的)。我正在使用以下代码,但这会导致错误: ORDID指向我正在使用的表中的字段。如何正确创建序列? 编辑: 据称,MySQL不使用序列。我现在正在使用以下代码,但这也会引起错误。我该如何解决? 编辑: 我想我找到了解决方法。对于phpMyAdmin(我正在使用),您可以使用以下代码。 我不知道为什么它会喜欢这种方式,但

  • 问题内容: 我需要创建一个视图,该视图具有一个名为row_num的列,将在其中插入行号,就像在普通表中自动递增一样。 假设我有这个普通表: 等等… 我要创建的视图是: 等等… 我可以通过一次选择生成row_num: 但是我的问题是将上面的查询与创建视图的查询结合起来。这是我正在尝试的组合查询: 我收到以下错误:#1351-视图的SELECT包含变量或参数 我知道我不能在带有视图的选择内使用选择,但

  • Mysql不允许在同一数据库表中有两个自动更新时间戳列。但是,许多人喜欢为他们的表“创建”和“更新”列,因为这种信息很有用,所以必须有一些解决方法。根据我收集的内容,一列必须是日期时间,另一列必须是时间戳。datetime 列可以用作创建的列,当默认为 null 时,使用触发器插入时,它将自动采用当前时间戳值。时间戳列可以用作更新的列,并且可以配置为按照mysql文档的描述自动更新。这两个页面对于

  • 问题内容: 实际上是否可以旋转T-SQL(2005),以使(出于争论的目的)第一列的行的值成为输出表的列的标题? 我意识到这并不是PIVOT真正的目的,而是我所需要的-能够请求表的功能,这些列是预先输入的,因为这些列已作为值输入到表中,因此事先不知道。 即使是骇客也不错,tbh。 问题答案: tzik Ben-Gan关于如何构建动态PIVOT的示例,我强烈推荐他的Inside Microsoft

  • 这个问题之后的讨论让我感到疑惑,所以我决定运行一些测试,比较和在Python中创建集合的创建时间(我使用的是Python3.7)。 我比较了使用和的两种方法。这两项结果均与以下结果一致*: 结果:0.30240735499999993 所以第二种方法几乎比第一种方法快3倍。这对我来说是一个很大的差别。通过这种方式优化set文字相对于方法的性能,究竟是怎么回事?在哪些情况下,哪一个是可取的? *注意