热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请问:sql中text/char/varchar/ntext/nchar/nvarchar的区别(主要是查询时的性能)

比如:(在VB中操作数据库)1.用char型的字段,会不会因为它定长而比varchar快一些(哪怕是一点)?如果不是,我就全用varchar了,因为实在是懒得trim2.用varcha
比如:(在VB中操作数据库)

1.用char型的字段,会不会因为它定长而比varchar快一些(哪怕是一点)?如果不是,我就全用varchar了,因为实在是懒得trim

2.用varchar(10),会不会比varchar(50)快一些?如果不是,就全用varchar(10000)了,因为实在懒得在insert的时候判断len(str),而且就算判断出来了,老提示用户字段过长也让人烦

3.用nchar/char型的字段(包括另两对),区别是什么?以前似乎见有帖说是前者处理中文较好,但我一直用char型没有遇到过问题。而且,最关心的还是:nchar会不会比char的效率低一些?

4.text呢?效率比别两种慢不慢?除了存地数据多之外,还有没有别的优势?

谢谢```

14 个解决方案

#1


呵呵,帮你顶;我也想看看高手怎么回答~~~

#2


如果你的系统是多语言版的你就会知道用CHAR有时一些汉字在转换时会出现乱码

#3


http://www.mssqlcity.com/Tips/design_optimization.htm

Use varchar/nvarchar columns instead of text/ntext columns whenever possible.
Because SQL Server stores text/ntext columns on the Text/Image pages separately from the other data, stored on the Data pages, it can take more time to get the text/ntext values.


Use char/varchar columns instead of nchar/nvarchar if you do not need to store unicode data.
The char/varchar value uses only one byte to store one character, the nchar/nvarchar value uses two bytes to store one character, so the char/varchar columns use two times less space to store data in comparison with nchar/nvarchar columns.


Consider setting the 'text in row' SQL Server 2000 table's option.
The text, ntext, and image values are stored on the Text/Image pages, by default. This option specifies that small text, ntext, and image values will be placed on the Data pages with other data values in a data row. This can increase the speed of read and write operations and reduce the amount of space used to store small text, ntext, and image data values. You can set the 'text in row' table option by using the sp_tableoption stored procedure.

#4


如果希望列中所有数据项的大小接近一致,则使用 char/nchar。nvarchar/nchar最多支持4000。
如果希望列中数据项的大小差异很大,则使用 varchar/nvarchar。varchar/char最多支持8000。

如果varchar够用的话,text最好不要用,查询效率会很低。

#5


varchar的效率也会比char的低一些,所以如果列中的数据大小接近一致的话,还是用char。

#6


'n'开头的是unicode,是国际标准,支持多国语言
text最好不用,只适于存储大数据,还要用专门的函数来读写更新,麻烦

#7


vivianfdlpw() 同志的网站打不开,不好意思;

总结一下各位的结论:
1.text能不用就不用
2.ntext 等,不需要就不用
3.char比varchar效率高一些(请高人判断一下这句是否正确)

还有一个问题未解决:

用varchar(10),会不会比varchar(50)快一些?
或者说,把varchar(50)用在原本可以用varchar(10)的地方,会不会造成效率降低?

#8


1.用char型的字段,会不会因为它定长而比varchar快一些(哪怕是一点)?如果不是,我就全用varchar了,因为实在是懒得trim

  用varchar,方便我们开发系统,但是就速度和空间考虑,用varchar没有char快,占的空间也大!
  char要在定长的情况下才好用,不然它会以空格填满,进行查询时就要处理。而我觉得字符型数据好象很少肯定定长的吧。

2.用varchar(10),会不会比varchar(50)快一些?如果不是,就全用varchar(10000)了,因为实在懒得在insert的时候判断len(str),而且就算判断出来了,老提示用户字段过长也让人烦

   这个我也想这样玩,不过我不敢这样定义!

3.用nchar/char型的字段(包括另两对),区别是什么?以前似乎见有帖说是前者处理中文较好,但我一直用char型没有遇到过问题。而且,最关心的还是:nchar会不会比char的效率低一些?

  多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。例子:我们定义char(10),写入10个中文字符,报错,只能写入5个中文,用nchar(10),10就可以写入10个中文字符。效率的衡量没有一个定论!实际char()也是要占用2个字节来存储中文,如果你又要申辩:nchar用2个字节存储英文,的确,效率,实在很难有个定论!  

4.text呢?效率比别两种慢不慢?除了存地数据多之外,还有没有别的优势?
  文本型数据中你可以存储超过20亿个字符串,怎么样,这个够大了吧?但是也不是任何时候都是和使用文本型数据,因为他非常占空间,也非常消耗服务器,随处乱用后果不堪设想!因为即使你像一个文本型字段输入了一个空值他都会占用2K的空间!而当这时除了删除该数据没有别的办法收回空间!效率不高这个可以肯定

#9


当长度不确定是用varchar可以减少数据库大小!
当长度确定是用char一样可以减少数据库大小!

这两个属性一句话:一个是时间换空间,一个是空间换时间。

我的选择是一个是时间换空间

#10


谢谢 MorningTea(一勺抹茶)同志!

另外有一问题:有无同志能给出varchar类型实际占用空间的表达式?这样可以有助于判断用char和varchar哪个更合适

比如
实际占用空间=f(字符串长度)=...
谢谢!

#11


up
我喜欢用nvarchar

#12


phommy(顽石宫主),我昨天也在这个版面碰到同样的类似问题,问到空间回收的问题,我找了很多网上文章,讲到这方面的文章多半是讲Oracle,而且详细到segment,阀值!

 不过关于sql server如何分配空间,除了我们知道用varchar(10)来存储‘我们’用4个byte之外,没有讲到很深的东西!

  谈到你说用varchar(10),会不会比varchar(50)快一些?如果不是,就全用varchar(10000)了,因为实在懒得在insert的时候判断len(str),而且就算判断出来了,老提示用户字段过长也让人烦

  我今天就因为这个差点都要被报重大异常,用户发了Mail给n个公司高层,非要我给个说法!

  哎,我查呀查,发现是因为繁体简体的原因,写入到sql server乱码,秀出给用户是正常显示,但是我后台处理因为是乱码,对字串的解释认为过长,写不进去!这个不同编码和字串长度,真是差点害死我这个可怜的程序员呀!!!

#13


呵呵 要是我有你的问题,只好用on error弄了,反正不管它超长不超长只管存,出错了就提示用户数据非法就是了...

感觉varchar存(我们)肯定不是4个byte,至少要有个结束位(估计是个字节),或者它用一个字来存放这个字段的实际大小。也就是说,实际空间=字符串长度+1或+2或更多。

关于其内部存储方式,估计只好问微软的人了,不过我做了个试验
新建两个表table1 table2, 都只有一列,一个是 char(8000) 一个是varchar(8000),都插入了3050条记录(8000个字母a),在查询分析器中,输入:

select * from table1
select * from table2

按ctrl+L,结果很惊人:
第一句用掉了1.61%的成本,第二句用掉了98.39%。

这就是char和varchar在定长字符串的处理中的效率比较
更多实验进行中...

#14


你问问经常出现在asp版的superdullwolf,好像他有点经验

 phommy,我是有on error的!目前系统如何修改,我会继续更进,真是一个头两个大

推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
莱斯卡尼娅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有