据我所知,MySQL没有任何特殊的SPARSE COLUMN
指令,任何像这样的问题都是纯粹的情境,所以我想知道何时使用稀疏列有一个很好的经验法则与什么时候创建另一个表。
作为一个具体的例子,我有一个名为Lessons
的表。我们想要添加一个lesProgramNumber
,但这只适用于任何给定时间内所有课程的大约10%(对于其他90%,它将为NULL)。我们可以通过非常轻松地使用NULL
表来避免大量LessonsProgramNumber
数据,但这有时需要额外的JOIN。有没有一种简单的方法可以选择我需要的东西?如果Lessons
只有500行怎么办?如果它有5亿呢?
答案 0 :(得分:5)
当列为NULL时,InnoDB的COMPACT行格式(默认值)不存储任何内容;它只存储非空列。它只是跳过磁盘行存储中的该列。所以稀疏列的成本并不是那么糟糕。
请参阅http://dev.mysql.com/doc/refman/5.1/en/innodb-physical-record.html