答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

时间:2022-11-14 09:45:14

http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html

1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储

过程和使用T-SQL查询数据有啥不一样;

------------------------------------------------

SQL中char、varchar、nchar、nvarchar的区别

http://www.cnblogs.com/carekee/articles/2094676.html

char(n):定长存储定长数据很方便 效率最高  超长会截取,不够长的存储空格,应用时要用trim之类的函数把两边的空格去掉 n 必须是一个介于 1 和 8,000 之间的数值

n代表字节数,对英文(ASCII)字符占用1个字节,也可以存储中文,对一个汉字占用2个字节

varchar(n):长度可变且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度

n代表字节数,每个英文(ASCII)字符都占用1个字节,也可以存储中文,对一个汉字占用两个字节  

nvarchar(n):变长Unicode,无论英文中文字符都占2个字节   n 的值必须介于 1 与 4,000 之间  n代表字符数

nchar(n):定长Unicode,无论英文中文字符都占2个字节   n 的值必须介于 1 与 4,000 之间  n代表字符数

char,varchar 最多8000个英文,4000个汉字

nchar,nvarchar  最多可存储4000个字符,无论英文还是汉字

何时该用CHAR,何时该用varchar2?

1、CHAR与VARCHAR是一对矛盾的统一体,两者是互补的关系.

VARCHAR比CHAR节省空间,在效率上比CHAR会稍微差一些,

即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。

2、VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。

--------------------------------------------------------------------------------------------------

xml的数据类型,在存储序列化数据的时候比较有用,还有就是配置文件。

@xml.query()得到的结果也是xml

@xml.value()得到的结果可以转换成int/varchar等。。。

@xml.exist()检查是否包含某个节点

@xml.modify()可以修改里面的内容

效率:exist>query>value          --这只是我的理解,exist只是检查路径,query没有转换,value需要转换。

XML类型查找数据的方法:query方法用于从XML数据类型提取XML;value方法用于从XML文档中返回单个值;exist方法用于确定指定节点是否存在于XML文档中。
这几个查找数据的方法谈不上哪个效率更高,每个都有它的用途;

--------------------------------------------------------------------------------------------------

储过程和T-SQL:

存储过程编译过,T-SQL每次需要重新编译;SP其实也是T-SQL的一部分。

使用存储过程和T-sql语句最大的区别就是:存储过程在创建时就进行了编译,以后调用时不在需要编译了,速度快。而T-sql语句每次执行时都会进行编译一次的,
会浪费很多时间,而且速度慢