教你合理设计数据表,将优化进行到底

本文探讨了如何通过合理选择数据类型如char、varchar、nvarchar等来优化数据库设计,减少存储空间并提高查询效率。同时介绍了不同整数类型的应用场景,并讨论了建立有效索引的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教你合理设计数据表,将优化进行到底 收藏
最近整理了下,希望对大家能有所帮助亚 wdx2008
------------------------------------------
字符
varchar       可变字符     和存储的字符字节相等   列:abc123占用6个字节(表现为占用磁盘大小,下同)
nvarchar   可变字符   是实际存储字节的两倍   例:abc123占用12个字节   该字符使用Unicode编码支持多国语言
char               固定字符     实际表现例:指定列的长度为10   将abc123填充进去后面将出现4个空格。
整数    
    bigint         占用8个字节
    从     -2^63       (-9223372036854775808)       到       2^63-1       (9223372036854775807)       的整型数据(所有数字)。  
    int      
    从       -2^31       (-2,147,483,648)       到       2^31       -       1       (2,147,483,647)       的整型数据(所有数字)。      
    smallint       占用4个字节
    从       -2^15       (-32,768)       到       2^15       -       1       (32,767)       的整数数据。      
    tinyint       占用一个字节
    从       0       到       255       的整数数据。      

总结:
1.如果网站只是中文,不涉及多国语言的建议使用varchar,使用nvarchar将浪费空间,影响效率。
2.字符长度相对固定的要使用char字段,比如USER_IP。char是定长的,       移动到下一条记录,       只需要做固定长度的指针偏移即可.     varchar则必须根据当前记录的长度算出下一个数据指针的偏移.  
3.字符为数字的最好使用数字型数据。因为其占用字节更小且排序亦占优势。如手机号码使用Varchar需11位   使用bigint则占用8位。

几个问题:
1.   char(n)一定比varchar(n)速度快么?      
    不一定      
    计算varchar的偏移是会花去一些cpu时间,但性能瓶颈不在此,在io.      
    db的io单位是数据页(8192字节)(一页存有多个数据行,数据行不能跨页。当然image,text等例外).      
    因此一页中行越多,性能越好。
2.使用的数字可能很小,但如果都定义成INT对效率有影响吗?
  是的
  这个是当然的,首先表现为int和tinyint占用的字节不同,也可理解成占用的磁盘的大小不同,较小的字节可以省去不必要的   内存消耗和相关指针转移。
3.varchar/char不支持多国语言,为什么英文和中文都能正常显示?
    这是因为服务器的操作系统和所安装的MSSQL都是中文的。
    参考:http://topic.youkuaiyun.com/t/20060324/18/4638303.html
4.其它还有什么方法提高数据库查询效率
    合理建索引必不可少。
    可参考http://topic.youkuaiyun.com/t/20040415/10/2967554.html
不同编码字节长度测试代码:
System.Text.Encoding.Unicode.GetByteCount(StrTest);  
System.Text.Encoding.UTF8.GetByteCount(StrTest);  
System.Text.Encoding.GetEncoding("GB2312").GetByteCount(StrTest);    

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/octverve/archive/2008/02/03/2079315.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值