mysql - 色谱柱的最佳用途是什么?

标签 mysql sql integer left-join

我有一个名为 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/

相关文章:

MySQL显示菜单包括父菜单

mysql - 安装 Sphinx 和 MySQL 5.7

php - 当两个查询相互依赖并且第二个查询失败时处理错误?

JAVA:如何在文本文件的一行中解析整数(由可变数量的空格分隔)

java - 检查整数的数字是否在增加(java)

php - Silverstripe/admin/突然停止工作

mysql - Percona - xtrabackup 中的回拷选项,用于恢复部分备份

Mysql优化日期过滤器

php - 在 sql 中使用查询重置表

c++ - 为什么 MSVC 选择 long long 作为 -2147483648 的类型?