jon*_*odo 4 sql sql-server null
如果您有一个包含20行的表,其中包含12个空列和8个包含值的列,那么对存储和内存使用的影响是什么?
null是唯一的还是每次都存储在同一位置的内存中并且只是被引用?大量的零空间占用了大量的空间吗?一个充满空值的表是否占用与具有相同大小的int值的表相同的空间量?
这是针对Sql server的.
小智 7
这取决于数据库引擎以及列类型.
至少SQLite将每个空列存储为"空类型",它不占用额外的空间(每个记录被序列化为单个blob用于存储,因此在这种情况下没有为非空值保留空间).通过这样的优化,NULL值的存储开销非常小.(SQLite还对值0和1进行了优化 - 数据库的设计者没有玩!)有关详细信息,请参阅2.1记录格式.
现在,事情会变得复杂得多,尤其是更新和潜在的索引碎片.例如,在SQL Server中,可以为列数据保留空间,具体取决于类型.例如,a int null仍将为整数保留空间(以及某处有"is null"标志),但varchar(100) null似乎没有保留空间(最后一位来自内存,所以要警告!).
快乐的编码.