我构建了一个分析引擎,从我的数据库中提取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”,“ – 1024”是将要存储的内容的良好示例)我正在考虑结构类型的smallint.那里的任何反馈,表现方面还是其他方面?
3)欢迎任何有关mysql性能问题或提示的其他反馈.
提前感谢您的意见.
最佳答案
我认为存储更多行(即标准化)的优势取决于面对变化时的设计和维护考虑因素.
此外,如果140列具有相同的含义或者每个实验它们不同 – 根据规范化规则正确建模数据 – 即数据如何与候选键相关.
就性能而言,如果使用所有列,则会产生很小的差异.有时,对于大量数据,pivot / unpivot操作可能是昂贵的,但它对单个密钥访问模式几乎没有什么区别.有时,数据库中的数据透视表可以使您的前端代码更加简单,并且后端代码在变更时更加灵活.
如果你有很多NULL,那么可以消除规范化设计中的行,这样可以节省空间.我不知道MySQL是否支持稀疏表概念,它可以在那里发挥作用.