一尘不染

mysql-创建行与列的性能

mysql

我建立了一个分析引擎,可以从数据库中提取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性能问题或技巧提出任何其他反馈。

预先感谢您的输入。


阅读 333

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

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

2020-05-17