问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...不定如何设置字段的长度查询最快又节省空间?

发布网友 发布时间:2024-04-10 06:26

我来回答

4个回答

热心网友 时间:2024-04-20 07:10

varchar是可变字符,varchar(2000)即可,不会浪费空间。
楼主为何要将历史记录存在access中呢?若您后台有sql server支持,建议您历史记录也存放在sql中,access的性能及对sql的语言支持都远不如 MSSQL。

【VARCHAR限制了字符串的长度不能超过255个字符?】---哦,忘记了,这个可能access有此限制,sql可以的,最大varchar(8000)。
varchar(100)中的100并不多余,在未存储数据时用于占位,系统会用于预先计划分配空间,但直到真正存储数据时才确实分配存储空间。

个人看法:
1.占用空间上varchar(100)和varchar(2000)没什么区别。
2.但varchar(100)会效率较低,因为按你说的该字段会5-2000,若大于100,则您每次固定写入100会需要多次写操作,众所周知写操作是比较耗时的。
3.查询性能方面,跟您这儿怎么存没太大关系,重要的还是常见的数据库查询优化,如索引、条件等等

对这个问题,我引用一下CSDN上的说法:

一。数据行结构
char(n): 系统分配n个字节给此字段,不管字段实际长度(后边用空格补齐)

varchar(n): 假设表中有M个varchar(或者nvarchar)类型的字段
先分配两个字节(用来表示M)
再分配2*M个字节(表示各变长行的偏移)
此后字段值有多长,就分配多长

二。varchar(n)一定比char(n)节省空间么?
不一定。
我见过这样的设计: varchar(3)
就算此字段为空,也还是比char(3)多用一个字节。

还有这样的设计: user_ip varchar(16).
对于这种数据长度变化不大的字段,用varchar只能浪费空间

结论: varchar适用于数据值长度不太短,且长度变化较大的字段

三。char(n)一定比varchar(n)速度快么?
不一定
计算varchar的偏移是会花去一些cpu时间,但性能瓶颈不在此,在io.
db的io单位是数据页(8192字节)(一页存有多个数据行,数据行不能跨页。当然image,text等例外). 因此一页中行越多,性能越好

另外,关于char和varchar的性能比较,

请参见该实验:
http://www.yuanma.org/data/2006/0730/article_1266.htm

再补充一下:

[转帖]char、nchar、varchar、nvarchar,对比那个好?

数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、
text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空
间,而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;另一种是则是觉得无所谓,
尽量用可变类型的,长度尽量放大些。

鉴于现在硬件像萝卜一样便宜的大好形势,纠缠这样的小问题实在是没多大意义,不过如果不弄清它,
总觉得对不起劳累过度的CPU和硬盘。

下面开始了(以下说明只针对SqlServer有效):

1、当使用非unicode时慎用以下这种查询:
select f from t where f = N'xx'

原因:无法利用到索引,因为数据库会将f先转换到unicode再和N'xx'比较

2、char 和相同长度的varchar处理速度差不多(后面还有说明)

3、varchar的长度不会影响处理速度!!!(看后面解释)

4、索引中列总长度最多支持总为900字节,所以长度大于900的varchar、char和大于450的nvarchar,nchar
将无法创建索引

5、text、ntext上是无法创建索引的

6、O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的
合理性来说,可变长度的类型更加吻合

7、一般基础资料表中的name在实际查询中基本上全部是使用like '%xx%'这种方式,而这种方式是无法利用
索引的,所以如果对于此种字段,索引建了也白建

8、其它一些像remark的字段则是根本不需要查询的,所以不需要索引

9、varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用
空间是无关的

10、对于固定长度的字段,是需要额外空间来存放NULL标识的,所以如果一个char字段中出现非常多的NULL,
那么很不幸,你的占用空间比没有NULL的大(但这个大并不是大太多,因为NULL标识是用bit存放的,
可是如果你一行中只有你一个NULL需要标识,那么你就白白浪费1byte空间了,罪过罪过!),这时候,
你可以使用特殊标识来存放,如:'NV'

11、同上,所以对于这种NULL查询,索引是无法生效的,假如你使用了NULL标识替代的话,那么恭喜你,
你可以利用到索引了

12、char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,
因此应该比较谁占用空间小。在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar
的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)
和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,
理论上就应该是varchar快了。因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)
大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。

13、nvarchar比varchar要慢上一些,而且对于非unicode字符它会占用双倍的空间,那么这么一种类型
推出来是为什么呢?对,就是为了国际化,对于unicode类型的数据,排序规则对它们是不起作用的,
而非unicode字符在处理不同语言的数据时,必须指定排序规则才能正常工作,所以n类型就这么一点好处。

总结陈词:
1、如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
2、能确定长度又不一定是ansi字符或者,那么用nchar;
3、不确定长度,要查询且希望利用索引的话,用nvarchar类型吧,将它们设到400;
4、不查询的话没什么好说的,用nvarchar(4000)
5、性格豪爽的可以只用3和4,偶尔用用1,毕竟这是一种额外说明,等于告诉别人说,我一定需要长度
为X位的数据

热心网友 时间:2024-04-20 07:09

数据库提供了36类字符数据类型——char、varchar、text
1.char 数据类型使用固定长度来存储字符,最长可以容纳8000个字符。利用char数据类型来定义表列或定义变量时,应该给定数据的最大长度。如果实际的字符长度短于给定的最大长充,刚多的字节会被空格填充。如果实际的多了,则被截断。(好处:可以精确计算数据占有的空间)
2.varchar是最长可以达到8000字符的变长字符型数据。它随存储在表列中的每一个数据的字符数的不同而变化。例如,定义表列为varchar(20),那么存储在该列的数据最多可以长达20个字节,如没达到20个字节,并不会在多余的字节上填充空格。所以大部分时候都选择varchar,可以有效的节省空间,不浪费。(像你的要求,就写varchar(2000)就行)
补:书中说的100是指它最多不能超过100。
3.text不常用,因为它是存储非常庞大的字符型数据的类型。当大于8000字节时,可以用text,它最大长度可以达到2的31次方减1个字符,约2G。
强调:text也是变长字符数据。

热心网友 时间:2024-04-20 07:07

text

热心网友 时间:2024-04-20 07:08

CHAR(100) 才固定是 100字节
VARCHAR 是可变长字符串,你存1字节就是1字节,不会浪费空间的

要查询速度快,就要给where条件后面的字段建立索引。
注意:索引是牺牲插入修改记录的速度来大幅度提高查询速度的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮帮忙写个英语作文80字的 谢谢 80年山东高考总分 总胆红素25.44(正常3.4-22),直接胆红素7.13(正常0-6.8... ...参考值 总胆红素 19.4 0-23.0 umol/L 直接胆红素 6.4 0-8.0 umol/... 蟹爪兰冬天多久浇水 冬季蟹爪兰浇水间隔需长达多久 蟹爪兰冬天什么时候浇水好 蟹爪兰冬天多久浇一次水 端午节一家人吃饭的说说 端午节跟谁一起过 端午节一家人聚在一起吃饭的说说 端午节是家人团聚吗 锌跟氯化铁能发生置换反应吗 ...部分为零的怎么没了呢,比如0.78就变成了.78 fecl3与sn反应方程式? 修改没到一年怎么改? 修改没到一年怎么改? 未满一年改二次方法 改错了未满一年怎么改回来 汽车音响改装不能忽视哪些问题 中国十大开国元帅中有几个是湖南的? 改错了未满一年怎么改回来 我老公半夜起来准备拿东西突然就晕倒了过后还吐了怎么回事 未满一年怎么强制改 修改不满一年能有什么办法再修改吗 西城区阳光丽景小区去大兴坐公交车怎么走 改错了未满一年怎么改回来? 未满一年怎么强制改 魔兽世界德鲁伊雕纹都镶什么? 我的母亲高烧40度不退,病因是二十多年前出车祸后的左腿。 左腿留了大... 什么叫体温脉搏分离曲线现象? 怎么清洗画纸上的污迹怎么去除书画上的污渍 被永久封了。绑定的银行卡怎样解绑? 被永久封了。绑定的银行卡怎样解绑? 被永久封了。绑定的银行卡怎样解绑? ...从长白山天池带回来的,墨绿色,晶体,上面有彩虹金属光泽 被封怎么解除银行卡? 我的被封了,银行卡怎么解绑? 江苏南通到陕西咸阳快递要几天 陕西到苏州快递要多久? 我的注销了,对方还会有我们的聊天记录吗? 注销后还会存在别人的好友列表吗? 注销在注册好友还在吗? 注销后对方列表里还有自己的吗? 注销多久后,彻底不存在 做广东省考申论试卷的时候,总是总结不到位,或者漏掉一些点?要怎么改善... ...然后回答问题。(8分)饯别王十一南游 刘长卿望君烟水阔,挥手泪沾巾... 形而上的拼音狐形而上的拼音是什么 湛江的哪些沙滩景区值得游客打卡? 湛江有哪些很适合欣赏海景的美景地? 湛江有哪些可以观赏绝美海景的好去处? 奥迪A5,“最美”轿跑,网友:真拉风