作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 Table1 的表,它大约有 20 列。这些列中有一半是字符串值,其余是整数。我的问题很简单:将所有列放入一张表中,还是将其分布到 2 个、3 个甚至 4 个表中,哪个更好?如果是这样,我必须使用 LEFT JOIN 加入他们。
最好的选择是什么?
谢谢
最佳答案
“最佳”的问题取决于表的使用方式。所以,这个问题没有真正的答案。我可以说 20 列并不是很多,很多非常合理的表都有超过 20 列的混合类型。
第一个观察:如果你问这样的问题,你对 SQL 有一定的了解,但不深入。一张 table 几乎肯定是最佳选择。
什么可能会改变这个建议?如果许多整数列都是NULL
——比如90%的记录都为NULL
——那么那些 NULL
值可能只是浪费数据页上的空间。通过消除这些行并将值存储在另一个表中,您可以减少数据的大小。
字符串值也是如此,但有一个警告。虽然整数至少占用 4 个字节,但可变长度字符串可能更小(取决于数据库存储它们的确切方式)。
另一个原因是数据的典型使用方式。如果查询通常只使用少数列,那么将每列存储在单独的表中可能会很有帮助。老实说,键列的开销通常会超过任何节省的开销。而且,这样的数据结构对于更新、插入和删除来说确实很糟糕。
但是,这在 Paraccel、Amazon Redshift 或 Vertica 等列式数据库中变得非常实用。此类数据库内置了对此类拆分的支持,并且可以对性能产生一些非常显着的影响。
关于mysql - 色谱柱的最佳用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160581/
我是一名优秀的程序员,十分优秀!