SQL Server:float与varchar存储非关联过滤小数数据的存储空间对比咨询
选varchar还是float?从存储空间和实用性分析
咱们先从你最关心的存储空间说起,再聊聊实际使用中的潜在问题,帮你做判断:
1. 存储空间对比
先明确两种类型的存储成本:
float在SQL Server里是固定8字节,不管你存的是整数1,还是16位小数0.8999999761581421,占用空间都是8字节。varchar是变长存储,实际占用空间等于字符数(变长字段的额外开销可以忽略不计):- 80%的场景是单个数字(比如1、4),只占1字节;
- 剩余20%的16位小数,比如
0.8999999761581421是18个字符(含小数点),占18字节。
按你的数据比例算平均存储空间:(0.8*1) + (0.2*18) = 4.4字节,比float的8字节省了近一半。单从存储空间看,varchar确实更划算。
2. 实用性与潜在风险
虽然存储空间占优,但varchar也有不少需要注意的点:
- 数据安全性:varchar是字符串类型,不小心可能存入非数字字符(比如输入错误的符号),后续如果要做转换计算会直接报错;而float是数值类型,数据库会自动校验输入合法性。
- 计算成本:哪怕你现在说不用关联过滤,万一以后需要对这些数值做计算(比如求和、平均值),varchar必须先转换成数值类型,会额外消耗CPU资源,性能比直接用float差。
- float的精度问题:补充一句,float是近似数值类型,不过你的16位小数刚好在float的精度范围内(float支持15-17位有效数字),所以存储这些值不会有明显精度丢失,这点不用太担心。
3. 最终建议
- 如果存储空间是第一优先级,并且能100%保证输入的都是合法数字,未来也绝对不会有计算/统计需求,那选varchar没问题;
- 如果更看重数据可靠性和未来扩展性(哪怕现在用不到计算,以后说不定有需求),还是坚持用float更稳妥——毕竟8字节的空间成本,在现在的存储硬件下大多可以接受,换回来的是省心和安全。
另外提一句,decimal类型就不用考虑了,比如decimal(18,16)需要9字节,比float还大,完全不符合你省空间的需求。
内容的提问来源于stack exchange,提问作者varun
相关产品推荐
相关产品推荐

