如何处理mysql中的“太多列”

Posted

技术标签:

【中文标题】如何处理mysql中的“太多列”【英文标题】:How to deal with "too many columns" in mysql 【发布时间】:2013-04-09 17:40:46 【问题描述】:

我在一个制表符分隔的文件中有 1800 列和大约 400 万行。我正在尝试将其加载为 mysql 关系。 Mysql 给我ERROR 1117 (HY0000): Too many columns。 我在网上查了一下,发现 MySQL 无法处理这么大的数据,有人建议将表垂直分区。

我正在寻找的是有关如何对此进行分区以及如何对分区表执行选择查询的示例。

谢谢

【问题讨论】:

如果你有 1800 列,你可能想要标准化一点。 1800 列是相当...疯狂。 为什么需要这么多列?你能描述一下这些列是什么吗? 我会拨打 1-800-NORMALIZE @user1140126 - 即使您需要所有这些数据,您也不必将它们保存为单个表的列。例如,如果其中一些字段代表测试结果,您可以创建tests 表并将它们全部放在那里。你可以更进一步,将tests拆分成test_typestest_results,以此类推。 【参考方案1】:

您可以拥有任意数量的表来定义单个关系。由于几个原因(性能、安全性),它也被认为是可接受的做法。

您只需要拆分 csv 文件并保持表与相同的主键链接。

要拆分 csv 文件,您可以轻松使用 cut(希望没有大小限制):

cut -d"," -f1-1000 patients.csv > cols1000.csv
cut -d"," -f1001-1800 patients.csv > cols1800.csv

当然,如果您愿意,您可以拆分更多。对于表格,我知道您已经知道如何导入。只需在两个表中使用 auto_increment pkey 即可保持关系。

【讨论】:

以上是关于如何处理mysql中的“太多列”的主要内容,如果未能解决你的问题,请参考以下文章

如何处理mysql中的时间戳读取问题

MySQL NULL 值如何处理?

MySQL从入门到精通50讲-MySQL中null值如何处理

通过JDBC处理数据库时如何处理夏令时?

如何处理数据集中的空白单元格

mySQL 如何处理 ORDER BY 中的动态值