我正在将一个具有1000万行和20列的大型CSV文件导入MySQL的表中。许多原本为INT,BIGINT,TIMESTAMP或FLOATS的值都为空。
例如:
mysql> SELECT ID,LinkedAccountId FROM billing_info WHERE LinkedAccountId = '' LIMIT 10;
+---------+-----------------+
| ID | LinkedAccountId |
+---------+-----------------+
| 9323504 | |
| 9323505 | |
| 9323507 | |
| 9323509 | |
| 9323527 | |
+---------+-----------------+
5 rows in set (18.69 sec)
我是否应该始终将CHAR或VARCHAR分配给上面的空列?还是有更好的方法呢?
答案 0 :(得分:0)
如果包含该列的行很少,并且大小稀疏,则可以按1-1关系拆分这些列,例如一列具有ID和LinkedAccountID的列,然后左联接该表以检索值。由于每个值将占用两列(ID和某个值),因此,例如,如果少于10%的行包含某个列,则可能值得这样做。如果缺少的列之间存在协方差(如果LinkedAccountID丢失,则也总是缺少2列),这将特别有用,因为您可以将所有列拆分到同一张表中。
在其他情况下,使用空值可能会更好。